檢測C++單鏈表中的循環引用可以使用快慢指針法。假設鏈表中有一個快指針和一個慢指針,快指針每次移動兩步,慢指針每次移動一步。如果存在循環引用,那么快指針和慢指針最終會在循環中相遇。
具體步驟如下:
以下是一個示例代碼:
bool hasCycle(ListNode* head) {
if(head == NULL) {
return false;
}
ListNode* slow = head;
ListNode* fast = head->next;
while(fast != NULL && fast->next != NULL) {
if(slow == fast) {
return true;
}
slow = slow->next;
fast = fast->next->next;
}
return false;
}
在上面的代碼中,我們定義了一個快指針fast和一個慢指針slow,它們分別移動一步和兩步。如果存在循環引用,快指針和慢指針最終會相遇并返回true,否則返回false。