Java数据结构——单向链表实现
/** * 单向链表实现类 * @Description * 类描述: * @author GaoAnQiu * @Date * @modify * 修改记录: * */ public class Link { private int size = 0; private Node first; private Node last; public Node getFirst() { return first; } public void setFirst(Node first) { this.first = first; } public Node getLast() { return last; } public void setLast(Node last) { this.last = last; } public Link() { } /** * 返回链表长度 * @Description * 方法描述: * @return 返回类型: int * @return */ public int getLength() { return size; } public void printLink(Link link) { Node temp = first; while (temp != null) { System.out.print(temp.getData() + "-->"); temp = temp.getNext(); } System.out.println(); } /** * 返回指定位置的节点 * @Description * 方法描述: * @return 返回类型: Node * @param index * @return */ public Node get(int index) { Node temp = first; for (int i = 0; i < index; i++) { temp = temp.getNext(); } return temp; } /** * 插入第一个元素,头和尾都指向同一个元素 * @Description * 方法描述: * @return 返回类型: void */ private void onetNode(int element) { first = new Node(); first.setData(element); last = first; } public void addHead(int element) { if (size == 0) { onetNode(element); } else { Node node = new Node(); node.setData(element); node.setNext(first); first = node; } size++; } /** * 插入尾结点 * @Description * 方法描述: * @return 返回类型: void * @param element */ public void addTail(int element) { if (size == 0) { onetNode(element); } else { Node node = new Node(); node.setData(element); last.setNext(node); last = node; //将插入的结点设置为尾结点 size++; } } /** * 插入中间元素 * 头尾两处需要特殊处理 * @Description * 方法描述: * @return 返回类型: void * @param index * @param element */ public void add(int index, int element) { if (index > size) { throw new IndexOutOfBoundsException("待插入的位置超过链表的最大长度。"); } else { if (index == 0) { //下标为0时,插入头元素 addHead(element); } else if (size == index) { //下标与链表长度一致时,插入尾元素 addTail(element); } else { Node preNode = get(index - 1); // Node nextNode = get(index); Node newNode = new Node(); newNode.setData(element); preNode.setNext(newNode); newNode.setNext(nextNode); size++; } } } /** * 删除头节点 * @Description * 方法描述: * @return 返回类型: void */ public void delHead() { if (size == 0) { throw new IndexOutOfBoundsException("空链表,无元素可删除"); } else { if (size == 1) { //只有一个节点时,清空链表 clear(); } else { Node nextNode = first.getNext(); first = nextNode; } size--; } } /** * 清空链表 * @Description * 方法描述: * @return 返回类型: void */ public void clear() { first = last = null; size = 0; } public void delTail() { if (size == 0) { throw new IndexOutOfBoundsException("空链表,无可删除的元素。"); } else if (size == 1) { clear(); } else { //取出尾节点的前一个节点,next赋值为null Node preTail = get(size - 2); preTail.setNext(null); last = preTail; size--; } } /** * 删除节点 * @Description * 方法描述: * @return 返回类型: void * @param index */ public void del(int index) { if (index >= size) { throw new IndexOutOfBoundsException("删除位置越界"); } else { if (index == 0) { delHead(); } else if (index == size - 1) { delTail(); } else { Node preNode = get(index - 1); Node nextNode = get(index + 1); preNode.setNext(nextNode); size--; } } } }
public class Node { private int data;//数据 private Node next;//指针 public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
好程序员分享JQuery.get提交页面不跳转的解决方法
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> window.location.host; $(document).ready(function () { $("#btnTestGet").click(function () { jQuery.get("About.aspx", { name: "alex" }, function () { alert("aaa")}); }); }); <button id="btnTestGet" value="Test JQuery" >Test JQuery</button> 问题分析: 有些Jquery 教程上说,使用jquery.get(url,data,function(){})可以跳转。 以上代码却没有跳转,如果中间有错误的话,不能执行回调函数的,但以上代码却执行...
- 下一篇
浅谈:前端如何赋能业务?
你是否头疼于,每天做不完的需求和改不完的bug? 你是否发愁,每天撸业务代码,是否能获得技术成长? 而追求成就感的你是否想过,你所编写的一行行代码,是在反复的变化中迅速成为遗留代码,还是助公司插上腾飞的翅膀,在你死我活的战场上脱颖而出? 因此本文会将业务和前端关联起来讨论,探讨业务发展的不同时期,前端所能做的一些事情,既能解业务的困扰,也让前端同学们摆脱码工、切图仔的定位。 千言万语不如一张图,全文完。 大误,还是得详细说说。 一、初始阶段 在业务的初始阶段,在市场定位、用户诉求、产品逻辑已经明确的前提下,此时业务的核心诉求是 『尽快上线』,进行快速验证和产品迭代,当然,质量还得能过得去。所以此时技术同学的方案侧重点是: 快、爽 先说『快』,在这种情况下,什么vue/react都见鬼去,老夫只用jQuery一把梭!这是反面案例,这样就只能重构火葬场
相关文章
文章评论
共有0条评论来说两句吧...