将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为循环链表。
//手动实现一个循环链表
public class LoopNode {
// 定义一个数据域
int data;
// 定义一个指针域
LoopNode next = this;
// 构造方法
public LoopNode(int data) {
this.data = data;
}
// 获取结点中的数据
public int getData() {
return this.data;
}
// 获取下一个结点
public LoopNode next() {
return this.next;
}
// 插入结点
public void insertNode(LoopNode node) {
// 保存下一个结点作为下下个结点
LoopNode nextNext = next;
// 将要插入的结点放到此结点后
this.next = node;
// 将指针指向下下个结点完成插入结点
node.next = nextNext;
}
// 删除结点
public void removeNode() {
// 取下下个结点
LoopNode nextNode = next.next;
// 将当前结点指向下下个结点实现删除
this.next = nextNode;
}
}
//测试类测试循环链表
class TestLoopNode {
public static void main(String[] args) {
// 定义结点
LoopNode n1 = new LoopNode(1);
LoopNode n2 = new LoopNode(2);
LoopNode n3 = new LoopNode(3);
LoopNode n4 = new LoopNode(4);
// 增加结点
n1.insertNode(n2);
n2.insertNode(n3);
n3.insertNode(n4);
// 打印结果2 3 4 1
System.out.println(n1.next().getData());
System.out.println(n2.next().getData());
System.out.println(n3.next().getData());
System.out.println(n4.next().getData());
}
}