我们先来谈谈循环链表,其实循环链表是基于单项链表实现的,让当前节点的next指向自己,即可实现循环链表
LoopNode next = this;


1、循环链表
示例代码:
public class LoopNode {
//节点内容
int data;
//下一个节点
LoopNode next = this;
public LoopNode(int data) {
this.data = data;
}
//指定位置处插入节点
public void insertNode(LoopNode node) {
//取出下一个节点,作为下下一个节点
LoopNode nextnext = this.next;
//让要插入的节点为当前节点的next
this.next = node;
//让下下一个节点为插入节点的next
node.next = nextnext;
}
//删除节点操作
public void delNode() {
//获取下下一个节点
LoopNode newNode = this.next.next;
//将下下一个节点设置为当前节点的下一个节点
this.next = newNode;
}
//获取下一个节点
public LoopNode next() {
return this.next;
}
//获取节点的数据
public int getData() {
return this.data;
}
}
2.双向循环链表(LinkArrayList底层原理)


//上一个节点
DoubleNode pro = this;
//下一个节点
DoubleNode next = this;
//节点数据
int data;
public DoubleNode(int data) {
this.data = data;
}
2、添加节点
//增加节点
public void insertNode(DoubleNode node) {
//将原来节点的下一个节点当作下下一个节点
DoubleNode nextnext = this.next;
//将要插入的节点当作前一个节点的下一个节点
this.next = node;
//把当前节点作为新节点的前一个节点
node.pro = this;
//将下下一个节点当作新插入节点的next
node.next = nextnext;
//让下下一个节点的上一个节点为新节点
node = nextnext.pro;
}
3、获取节点及数据
//下一个节点
public DoubleNode next() {
return this.next;
}
//上一个节点
public DoubleNode pro() {
return this.pro;
}
//获取数据
public int getData() {
return this.data;
}
完整代码
package com.yueqian.shujujiegou;
/**
* 数据结构------双向循环链表
* @author LinChi
*
*/
public class DoubleNode {
//上一个节点
DoubleNode pro = this;
//下一个节点
DoubleNode next = this;
//节点数据
int data;
public DoubleNode(int data) {
this.data = data;
}
//增加节点
public void insertNode(DoubleNode node) {
//将原来节点的下一个节点当作下下一个节点
DoubleNode nextnext = this.next;
//将要插入的节点当作前一个节点的下一个节点
this.next = node;
//把当前节点作为新节点的前一个节点
node.pro = this;
//将下下一个节点当作新插入节点的next
node.next = nextnext;
//让下下一个节点的上一个节点为新节点
node = nextnext.pro;
}
//下一个节点
public DoubleNode next() {
return this.next;
}
//上一个节点
public DoubleNode pro() {
return this.pro;
}
//获取数据
public int getData() {
return this.data;
}
}
双向循环链表就介绍这么多了,对链表操作还不太熟练的小可爱们,可以看看我的这篇博客:
记得点赞+关注👉:手把手教你用java语言实现数据结构(二)-----------单向链表