代码
package com.wuxudong.doublenode;
//循环双向链表的实现
public class DoubleNode {
//双向链表存储三个数据,一个是当前节点的值,一个是上一个节点的引用,一个是下一个节点的引用
private int data;
private DoubleNode pre=this;
private DoubleNode next=this;
public DoubleNode(int data){
this.data=data;
}
//获取数据
public int getData(){
return this.data;
}
//获取上一个节点
public DoubleNode pre(){
return this.pre;
}
//获取下一个节点
public DoubleNode next(){
return this.next;
}
//添加节点的方法
public void addNode(DoubleNode node){
//获取当前节点
DoubleNode currentNode=this;
//保存当前节点的下一个节点
DoubleNode nextNode=currentNode.next;
//当前节点的下一个节点应该是新节点
currentNode.next=node;
//当前节点的下一个节点的上一个节点应该是新节点
nextNode.pre=node;
//新节点的上一个节点应该是当前节点
node.pre=currentNode;
//新节点的下一个节点应该是当前节点的下一个节点
node.next=nextNode;
}
//删除当前节点的方法
public void deleteNode(){
if(this==null){
throw new RuntimeException("当前节点为空");
}
//获取当前节点
DoubleNode node=this;
//获取当前节点的上一个节点
DoubleNode preNode=node.pre;
//获取当前节点的下一个节点
DoubleNode nextNode=node.next;
//上一个节点的下一个应该是下一个节点
preNode.next=nextNode;
//下一个节点的上一个节点应该是上一个节点
nextNode.pre=preNode;
}
}
测试代码
package com.wuxudong.doublenode;
public class DoubleNodeTest {
public static void main(String[] args) {
DoubleNode doubleNode1=new DoubleNode(1);
DoubleNode doubleNode2=new DoubleNode(2);
DoubleNode doubleNode3=new DoubleNode(3);
doubleNode1.addNode(doubleNode2);
doubleNode2.addNode(doubleNode3);
/* System.out.println(doubleNode1.next().getData());//2
System.out.println(doubleNode1.getData());//1
System.out.println(doubleNode1.pre().getData());//3
System.out.println(doubleNode2.next().getData());//3
System.out.println(doubleNode2.getData());//2
System.out.println(doubleNode2.pre().getData());//1
System.out.println(doubleNode3.next().getData());//1
System.out.println(doubleNode3.getData());//3
System.out.println(doubleNode3.pre().getData());//2*/
//删除节点3
doubleNode3.deleteNode();
System.out.println(doubleNode1.next().getData());//2
System.out.println(doubleNode1.getData());//1
System.out.println(doubleNode1.pre().getData());//2
System.out.println(doubleNode2.next().getData());//1
System.out.println(doubleNode2.getData());//2
System.out.println(doubleNode2.pre().getData());//1
}
}