双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。
即双向链表有两个指针域,一个指向直接后继,一个指向直接前驱。
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 class TestDoubleNode{
public static void main(String[] args) {
//创建结点
DoubleNode n1= new DoubleNode(1);
DoubleNode n2= new DoubleNode(2);
DoubleNode n3= new DoubleNode(3);
//查看上一个、自己、下一个结点的内容
//输出 1 1 1
System.out.println(n1.pre().getData());
System.out.println(n1.getData());
System.out.println(n1.next().getData());
//追加结点
n1.after(n2);
n2.after(n3);
//测试
//输出 1 2 3 1 3
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());
}
}