线性数据结构之链表-三、循环链表(Circular Linked List)

时间:2024-11-01 19:21:12

定义:循环链表是一种特殊的链表结构,其中最后一个节点的 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)
    }
}