繼前面學習的單向串列之後,我們將進一步探討另一種常見的串列結構,即環狀串列 (Circular Linked List)。這種串列結構與單向串列有相似之處,但它具有一個獨特的特點:最後一個節點指向頭部節點,形成一個環狀結構。
環狀串列的基本概念
環狀串列與單向串列的主要區別在於它沒有任何節點指向 nullptr。相反,最後一個節點將指向頭部節點。由於這個特點,環狀串列的遍歷比單向串列要複雜一些,因為它可能會造成無窮迴圈。
C++中的環狀串列實現
以下是一個基本的環狀串列在C++中的實現:
#include <iostream>
class Node {
public:
int data;
Node* next;
Node(int value) : data(value), next(nullptr) {}
};
class CircularLinkedList {
private:
Node* head;
public:
CircularLinkedList() : head(nullptr) {}
// 插入節點到串列尾端
void append(int value) {
Node* newNode = new Node(value);
if (!head) {
head = newNode;
newNode->next = head;
} else {
Node* current = head;
while (current->next != head) {
current = current->next;
}
current->next = newNode;
newNode->next = head;
}
}
// 列印串列中的所有元素
void printList() const {
if (!head) return;
Node* current = head;
do {
std::cout << current->data << " -> ";
current = current->next;
} while (current != head);
std::cout << "(back to head)" << std::endl;
}
// ... 其他方法例如刪除節點、查找節點等 ...
};
int main() {
CircularLinkedList cll;
cll.append(5);
cll.append(10);
cll.append(15);
cll.printList();
return 0;
}
環狀串列的操作
環狀串列的操作大多數與單向串列相似,但由於其環狀結構,某些操作需要特別處理以避免無窮迴圈。
總結
環狀串列為我們提供了一個有趣的數據結構,它在某些應用中,如循環緩存、約瑟夫問題等,可能特別有用。