本篇文章主要使用Java实现单链表存储以及一些个人的理解,链表的概念已经有很多了,但是实现方法有很多,概念不会的可以看这个《线性表的基本概念》,我主要说说针对Java的单链表实现的理解。在有指针的语言里面(C/C++等),链表的连接是可以直接通过指针指向下一个节点实现的。但是Java没有指针,所以参考了一下别人的写法,大概都是使用对象存储实现的,个人感觉别的写法比较粗糙,就自己实现了一个。有不对的地方请指出。
Java实现链表使用的是对象存储,通俗来说就是头结点是一个节点对象,头结点的数据域是下一个节点对象,下一个节点的数据域里面是下下个节点对象...以此类推。
所以根据需求可以大概设计出:
1.节点类Node.java:包涵数据域和指针域,数据域存储数据,指针域存储下一个节点对象
2.操作节点类OperationLinked.java:对节点的各种操作,本次主要实现以下功能
- 在头部添加节点(默认添加方式)
- 在尾部添加节点
- 在指定位置添加节点
- 删除指定位置节点
- 显示所有节点信息
- 显示指定位置节点信息
3.测试类Test.java:测试功能
注意事项:
1.头结点默认存在,所以一开始使用构造方法创造一个头结点
2.在指定位置添加节点、删除指定位置节点、显示指定位置节点时,要判断是否超出链表位置
节点类Node.java:
//链表中的节点
public class Node<Type> {
private Type data; //节点中的数据域:保存数据
private Node next; //节点中的指针域:理论上来说保存的是指向下一个节点的指针,在Java中没有指针所以直接保存下一个节点
//不带参构造方法,每个刚创建的新节点的指针域都是null
public Node() {
this.next = null;
}
//带参构造方法,每个刚创建的新节点的指针域都是null
public Node(Type data) {
this.data = data;
this.next = null;
}
public Type getData() {
return data;
}
public Node getNext() {
return next;
}
public void setData(Type data) {
this.data = data;
}
public void setNext(Node next) {
this.next = next;
}
}
操作节点类OperationLinked.java:
/** * 节点操作类 * 1.创建头结点。头结点指针域指向第一个节点 * 2.在头部添加节点(默认添加方式) * 3.在尾部添加节点 * 4.在指定位置添加节点 * 5.删除指定位置节点 * 6.显示所有节点信息 * 7.显示指定位置节点信息 */ public class OperationLinked { Node head = new Node<>(); //创建一个头结点