Danh sách liên kết vòng: nút cuối trỏ về head. Kiểm tra bằng cách lưu head, duyệt qua next, nếu gặp NULL → không vòng, nếu gặp lại head → vòng.
Ví dụ minh họa
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
};
Node* getNode(int data) {
Node* newNode = new Node;
newNode->data = data;
newNode->next = NULL;
return newNode;
}
bool isCircularList(Node* start) {
if (start == NULL) return true; // rong coi la vong
Node* node = start->next;
while (node != NULL && node != start)
node = node->next;
return (node == start);
}
int main() {
Node* start = getNode(10);
start->next = getNode(20);
start->next->next = getNode(30);
start->next->next->next = getNode(40);
start->next->next->next->next = getNode(50);
start->next->next->next->next->next = start; // tao vong
if (isCircularList(start))
cout << "Danh sach la vong";
else
cout << "Danh sach KHONG la vong";
}
Kết quả
Danh sach la vong