一、循环链表 ( 单循环链表 )
在 单链表 中 ,
将 最后一个节点 的指针 指向 第一个节点 , 形成一个闭环 ,
上述 头尾相连 的单链表 称为 " 单循环链表 " ,
简称为 " 循环链表 " ;
在 循环链表 中 , 没有明确的 第一个节点 或 最后一个节点 ;
循环链表 可以 模拟 环形结构 数据 , 如 : 循环队列 ;
二、代码示例 - 使用 Java 实现 单循环链表
在下面的代码中 ,
- 定义节点类 : Node 是 循环链表 中的节点 , 每个节点都包含 data 数据 和 指向下一个节点的指针 next ;
- 定义应用类 : CircularLinkedList 类中 , 定义了 单链表 的首元素 , 借助该元素 , 可以访问所有的链表数据 ;
- 新增节点 : 调用 CircularLinkedList#append 函数 , 可以新增一个节点 ,
- 先创建一个新节点 newNode , 然后判断 链表首元素 head 是否为空 , 链表首元素为空 , 即链表为空 ;
- 如果链表为空 , 我们将头指针 head 指向新节点 , 并将新节点的 next 指针 指向自身,以形成循环。
- 如果链表非空 , 我们遍历链表找到最后一个节点 , 并将其 next 指针 指向新节点 , 再将新节点的next指针指向头节点 ;
- 先创建一个新节点 newNode , 然后判断 链表首元素 head 是否为空 , 链表首元素为空 , 即链表为空 ;
使用 Java 语言实现 单循环链表 :
代码语言:javascript复制public class Node {
public int data;
public Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
public class CircularLinkedList {
private Node head;
public CircularLinkedList() {
this.head = null;
}
public void append(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
head.next = head;
} else {
Node lastNode = head;
while (lastNode.next != head) {
lastNode = lastNode.next;
}
lastNode.next = newNode;
newNode.next = head;
}
}
public void printList() {
if (head == null) {
System.out.println("Circular Linked List is empty.");
return;
}
Node current = head;
do {
System.out.print(current.data " ");
current = current.next;
} while (current != head);
}
public static void main(String[] args) {
CircularLinkedList cll = new CircularLinkedList();
cll.append(1);
cll.append(2);
cll.append(3);
cll.append(4);
cll.printList();
}
}