Leetcode 142 環形鍊錶

2021-10-14 18:29:37 字數 1017 閱讀 2179

問題重述

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 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 ...