原理:快慢指標法比較經典的一種運用
想象一下,兩名運動員以不同的速度在環形賽道上跑步會發生什麼?
通過使用具有 不同速度 的快、慢兩個指標遍歷鍊錶,空間複雜度可以被降低至 o(1)o(1)。慢指標每次移動一步,而快指標每次移動兩步。
如果列表中不存在環,最終快指標將會最先到達尾部,此時我們可以返回 false。
現在考慮乙個環形鍊錶,把慢指標和快指標想象成兩個在環形賽道上跑步的運動員(分別稱之為慢跑者與快跑者)。而快跑者最終一定會追上慢跑者。這是為什麼呢?考慮下面這種情況(記作情況 a)- 假如快跑者只落後慢跑者一步,在下一次迭代中,它們就會分別跑了一步或兩步並相遇。
其他情況又會怎樣呢?例如,我們沒有考慮快跑者在慢跑者之後兩步或三步的情況。但其實不難想到,因為在下一次或者下下次迭代後,又會變成上面提到的情況 a。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
listnode* slow = head;
listnode* fast = head->next;
while (slow != fast)
slow = slow->next;
fast = fast->next->next;
}return true;}};
leetcode141 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?思路 剛開始想著讓他迴圈下去,直到和頭結點相同的時候,就返回 true,否則就返回 false,但還是 too young too 實際上還是設定兩個指標,乙個快指標和乙個慢指標,只要是在環裡面,總會相遇的,就可 return t...
LeetCode141 環形鍊錶
題目描述 給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?演算法描述 1.使用兩個快慢指標遍歷鍊錶。slow每次走一步,fast每次走兩步。fast走到鍊錶尾部無環,slow與fast重疊則有環。2.若鍊錶的起始位置等於環的起始位置 slow走一圈回到起始位置,fast剛好走了...
LeetCode141環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。設定兩個指標,乙個fast乙個slow,遍歷整個列表,若達到表尾時仍未出現指標相等則鍊錶無環。c語言版 definition for singly linked list.struct listnode bool hascycle struct listnode h...