寫在前面
- 首先思路正確是高效解題的關鍵
- 戰略性失誤,思路腫是錯怎麼破 ==||
題目詳情
給定一個鏈表,判斷鏈表中是否有環。
爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鏈表中有一個環,其尾部連接到第二個節點。
示例 2:
輸入:head = [1,2], pos = 0
輸出:true
解釋:鏈表中有一個環,其尾部連接到第一個節點。
示例 3:
輸入:head = [1], pos = -1
輸出:false
解釋:鏈表中沒有環。
進階:
你能用 O(1)(即,常量)內存解決此問題嗎?
ac代碼
- 快慢指針思想
- 設定2個指針,如果快指針追上慢指針則有環;如果指向NULL則無環。
- 注意判斷快指針的next是否爲NULL
class Solution
{
public:
bool hasCycle(ListNode *head)
{
ListNode *l1 = head, *l2 = head;
while(l1 != NULL && l2 != NULL && l2->next != NULL)
{
l1 = l1 -> next;
l2 = l2 -> next -> next;
if(l1 == l2)
return true;
}
return false;
}
};