142. Linked List Cycle II
題目網址:https://leetcode.cn/problems/linked-list-cycle-ii/
題意:給一 linked list 的
head, 返回 cycle 的起點。若無 cycle, 則返回null。進階:設計 $O(1)$ space 的演算法


Solution:
想法:定義以下變數
L是起始點和 cycle head 的距離x是 cycle head 到第一次相遇的距離C是整個 cycle 的長度第一次相遇可以寫成一個等式:
2(L + x) = L + nC + x
其中,L + x為烏龜走的步數,L + nC + x為兔子走的步數nC代表兔子率先進入 cycle, 在和烏龜第一次相遇之前可能已經繞 cycle 好幾圈了
2(L + x) = L + nC + x可化簡成L + x = nC
讓烏龜回到原點, 然後走
L步抵達 cycle head兔子則在第一次相遇的地方
(L+x)走L步
此時兔子的新位置在(L + x) + L = nC + L也就是在 cycle head
(nC + L可看成從起點走L步到達 cycle head, 然後繞了 cyclen圈, 位置仍在 cycle head)
class Solution { |
- time:$O(n)$ ➔ cycle 長度不超過
n - space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論
