/**
* @Description 定义一个循环链表
* @auther Eleven
* @create 2020-04-03 21:33
**/
public class LoopNode {
//用于存储链表里面的数据
int data;
//这里如果是定义一个单独的node时,要将这个指向自身
LoopNode next = this;
//用于初始化的时候给node中保存数据
public LoopNode(int data) {
this.data = data;
}
//删除节点
public void remove(LoopNode node){
//找到要删除节点的下一个节点
LoopNode nextNode = node.next();
//定义变量接受当前节点
LoopNode currentNode = this;
//循环判断当前节点的下一个节点是否等于要移除的节点,如果不等于就继续循环,如果等于就跳出循环
while(currentNode.next != node){
//不等于就把当前的节点的下一个节点赋给当前节点
currentNode = this.next;
}
currentNode.next = nextNode;
}
//添加链表中的节点 就是将当前节点的下一个节点指向该节点,原下一个节点改为新增加的这个节点的下一个节点
public void after(LoopNode node){
//定义变量接受当前节点
LoopNode currentNode = this;
//获取原先当前节点的下一个节点
LoopNode nextNext = currentNode.next;
//当前节点的下一个节点设置为新的节点
this.next = node;
//新节点的下一个节点设置为原先节点的下一个节点
node.next=nextNext;
}
//获取当前节点中的数据
public int getData(){
return this.data;
}
//获取当前节点的下一个节点
public LoopNode next(){
return this.next;
}
}
测试用例:
class Test01{
public static void main(String[] args) {
LoopNode l1 = new LoopNode(1);
LoopNode l2 = new LoopNode(2);
LoopNode l3 = new LoopNode(3);
LoopNode l4 = new LoopNode(4);
l1.after(l2);
l2.after(l3);
l3.after(l4);
System.out.println(l1.next.getData());
System.out.println(l2.next.getData());
System.out.println(l3.next.getData());
System.out.println(l4.next.getData());
}
}