定义:循环链表是一种特殊的链表结构,其中最后一个节点的 next
指针指向链表的头部,形成一个闭环。循环链表可以是单链表或双链表。
1. 特点
-
循环结构:最后一个节点的
next
指向头节点。 - 无头无尾:从任意节点开始遍历都能回到起点。
2. 优点
- 支持循环访问:可以从任意节点开始无限循环遍历。
- 高效处理循环队列:适用于队列循环、轮询等场景。
3. 缺点
- 实现复杂度稍高:需要注意处理指针操作,防止无限循环。
- 内存浪费:如果不需要循环特性,可能会浪费内存。
4. 应用场景
- 循环任务:如多任务调度、音乐播放器的循环播放。
- 环形缓冲区:适用于实时数据流或固定容量的数据缓存。
5. 示例代码(Java)
class CircularNode {
int data;
CircularNode next;
CircularNode(int data) {
this.data = data;
this.next = null;
}
}
public class CircularLinkedList {
CircularNode head;
// 插入节点到链表尾部
public void insert(int data) {
CircularNode newNode = new CircularNode(data);
if (head == null) {
head = newNode;
head.next = head; // 形成循环
} else {
CircularNode current = head;
while (current.next != head) {
current = current.next;
}
current.next = newNode;
newNode.next = head; // 形成循环
}
}
// 输出链表
public void display() {
if (head != null) {
CircularNode current = head;
do {
System.out.print(current.data + " -> ");
current = current.next;
} while (current != head);
System.out.println("(head)");
}
}
public static void main(String[] args) {
CircularLinkedList list = new CircularLinkedList();
list.insert(10);
list.insert(20);
list.insert(30);
list.display(); // 输出:10 -> 20 -> 30 -> (head)
}
}