問題重述
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。
為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。
說明:不允許修改給定的鍊錶。
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:返回索引為 1 的鍊錶節點
解釋:鍊錶中有乙個環,其尾部連線到第二個節點。
思路
遇到這種鍊錶找環路的問題,通用解法就是-快慢指標(floyd判圈法),給定兩個指標,分別命名為 slow 和 fast,起始位置在鍊錶的開頭。每次 fast 前進兩步,slow 前進一步。如果 fast 可以走到盡頭,那麼說明沒有環路;如果 fast 可以無限走下去,那麼說明一定有環路,且一定存在乙個時刻 slow 和 fast 相遇。
do
while
(fast != slow)
;
當 slow 和 fast 第一次相遇時,我們將 fast 重新移動到鍊錶開頭,並讓 slow 和 fast 每次都前進一步。當 slow 和 fast 第二次相遇時,相遇的節點即為環路的開始點。
最終**
class
solution
while
(fast != slow)
; fast = head;
//fast和slow第一次相遇後,將fast指標重新到起點
while
(fast != slow)
return fast;}}
;
leetcode 142 環形鍊錶
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。思路 首先通過快慢指標的方法判斷鍊錶是否有環 接下來如果有環,則尋找入環的第乙個節點。具體的方法為,首先假定鍊錶起點到入環的第乙個節點a的長度為a 未知 到快慢指標相遇的節點b的長度為 a b 這個...
leetcode 142環形鍊錶
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。example 輸入 head 3,2,0,4 pos 1...
Leetcode142 環形鍊錶
目錄 一 題目 二 示例 三 思路 四 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。高階 你能用 o ...