java实现双链表
双链表也可以分为普通双链表和循环双链表。双链表指的是一个结点除了包括结点内容之外,还包括此节点的前一结点信息和后一结点的结点信息。
看到一篇博客解释的不错,包含链表的图解释等,此处引用一下。
链接信息为:链表示意图
Java实现循环双向链表
思路为对于每个结点都要设置一个前一结点和后一节点,并且初始化为本身(单个结点),然后增加结点。代码实现注释很详细不在一一论述。实现比较简单,只是学习。
package 线性结构;
public class DoubleNode {
//上一个结点
DoubleNode pre = this;
//下一个结点
DoubleNode next = this;
//结点数据
int data;
public DoubleNode(int data) {
this.data = data;
}
//增结点
public void after(DoubleNode node) {
//原来的下一个结点
DoubleNode nextNext = next;
//新结点作为当前结点的下一个结点
this.next = node;
//当前结点做新结点的前一个结点
node.pre = this;
//让原来的下一结点作为新结点的下一个结点
node.next = nextNext;
//让原来的下一个结点的上一个结点为新结点
nextNext.pre = node;
}
public DoubleNode next() {
return this.next;
}
public DoubleNode pre() {
return this.pre;
}
//获取数据
public int getData() {
return this.data;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建结点
DoubleNode n1 = new DoubleNode(1);
DoubleNode n2 = new DoubleNode(2);
DoubleNode n3 = new DoubleNode(3);
//追加结点
n1.after(n2);
n2.after(n3);
System.out.println(n2.pre().getData());
System.out.println(n2.getData());
System.out.println(n2.next().getData());
System.out.println(n3.next().getData());
System.out.println(n1.pre().getData());
}
}