給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回null
。
說明:不允許修改給定的鍊錶。
思路:
首先通過快慢指標的方法判斷鍊錶是否有環;接下來如果有環,則尋找入環的第乙個節點。具體的方法為,首先假定鍊錶起點到入環的第乙個節點a的長度為a【未知】,到快慢指標相遇的節點b的長度為(a + b)【這個長度是已知的】。現在我們想知道a的值,注意到快指標p2始終是慢指標p走過長度的2倍,所以慢指標p從b繼續走(a + b)又能回到b點,如果只走a個長度就能回到節點a。但是a的值是不知道的,解決思路是曲線救國,注意到起點到a的長度是a,那麼可以用乙個從起點開始的新指標q和從節點b開始的慢指標p同步走,相遇的地方必然是入環的第乙個節點a。
public listnode detectcycle(listnode head)
if(fast == null || fast.next == null) return null;
fast = head;
while(fast != slow)
return slow;
}
leetcode 142環形鍊錶
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。example 輸入 head 3,2,0,4 pos 1...
Leetcode 142 環形鍊錶
問題重述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。說明 不允...
Leetcode142 環形鍊錶
目錄 一 題目 二 示例 三 思路 四 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。高階 你能用 o ...