单向链表的Java实现,以及相关函数。
2016-10-05 13:34
459 查看
如上图所示就是单向链表的示意图:下面就是Java实现单向链表的基本过程与源码,可以跑起来的。1.创建一个节点类
package com.wpl.snglelink; public class Node { public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } //存储数据 private Object data; //下一个节点 private Node next; //定义构造方法 public Node(Object data,Node next) { this.data=data; this.next=next; } public Node() { } }
2.实现单向链表和相关函数
<pre name="code" class="java">package com.wpl.snglelink; //实现单向链表 public class SingleLinkImpl { //保存链表的头节点 private Node header; //保存链表的尾节点 private Node tail; //保存节点数 int length=0; //创建一个空的单向链表 public SingleLinkImpl(){ header=null; tail=null; } //指定某一个元素创建一个单向链表 public SingleLinkImpl(Object element){ header=new Node(element, null); //头和尾都是指向同一个 tail=header; length++; } //返回链表的长度 public int getLength() { return length; } //采用尾插入法为链表添加新的节点 public void add(Object data){ //判断此时是否为空链表 if(header==null) { header=new Node(data, null); //头和尾指向同一个节点 tail=header; }else{ //创建新的节点 Node newNode=new Node(data,null); //尾部节点next指向新增的节点 tail.setNext(newNode); //新的节点作为尾部节点 tail=newNode; } length++; } //获取链表中索引为index出的元素 public Object getData(int index) { return getNodeByIndex(index).getData(); } private Node getNodeByIndex(int index) { if(index<0||index>length-1) { throw new IndexOutOfBoundsException("索引越界!"); } //从头节点开始 Node current=header; for(int i=0;i<length&¤t!=null;i++,current=current.getNext()) { if(i==index) { return current; } } return null; } //查询指定元素的索引哈 public int getDataIndex(Object data) { Node current=header; for(int i=0;i<length&¤t!=null;i++,current=current.getNext()) { if(current.getData().equals(data)) { return i; } } return -1; } //向单向链表中指定位置插入一个元素 public void insertDataByIndex(Object data,int index) { if(index<0||index>length-1) { throw new IndexOutOfBoundsException("插入的位置有错误!"); } //如果链表还是空的话,这个是要考虑的哈 if(header==null) { add(data); length++; }else{ //考虑好是否是在链表头插入的哈 if(index==0) { header=new Node(data,header); length++; }else{ //获取前一个节点 Node prev=getNodeByIndex(index-1); //改变指向 prev.setNext(new Node(data,prev.getNext())); length++; } } } //删除索引中的指定的节点 public void myDelete(int index) { if(index<0||index>length-1) { throw new IndexOutOfBoundsException("删除索引超出边界!"); } if(header==null) { throw new NullPointerException("链表为空!"); } //判断是不是删除第一个节点 if(index==0) { //改变头节点 哈! header=header.getNext(); length--; }else{ //获取删除的节点哈! Node del=getNodeByIndex(index); //获取删除节点的前一个节点 Node prev=getNodeByIndex(index-1); prev.setNext(del.getNext()); length--; } } public static void main(String[] args) { SingleLinkImpl myTest=new SingleLinkImpl(); myTest.add("123"); myTest.add("234"); myTest.add("wang"); myTest.add(123); System.out.println(myTest.getLength()); myTest.insertDataByIndex("test", 2); myTest.myDelete(4); System.out.println(myTest.getData(2)); System.out.println(myTest.getDataIndex("wangpeili")); } }
相关文章推荐
- 双向链表的Java实现,以及相关函数的实现
- Java中栈的实现(2)-使用单向链表以及实现
- java实现链表以及相关操作
- Java中队列的实现(2)-使用单向链表以及实现
- java实现单向链表
- java 单向链表的实现
- Java模拟单向链表和双向链表的实现
- Java 之 模拟单向链表和双向链表的实现
- Java实现单向链表
- JAVA实现单向链表反转2
- 数据结构:线性表的链式存储(单向链表)--Java实现
- 单向单链表的java实现
- java如何去实现单向链表
- 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
- 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
- java模拟链表和栈以及简单实现
- Java模拟单向链表和双向链表的实现
- Java模拟单向链表和双向链表的实现
- 单向循环链表的实现以及约瑟夫环的实现
- Java实现链表(单向和双向)