給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。
為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。
說明:不允許修改給定的鍊錶。
高階:你是否可以使用 o(1) 空間解決此題?
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:返回索引為 1 的鍊錶節點
解釋:鍊錶中有乙個環,其尾部連線到第二個節點。
示例 2:
輸入:head = [1,2], pos = 0
輸出:返回索引為 0 的鍊錶節點
解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。
示例 3:
輸入:head = [1], pos = -1
輸出:返回 null
解釋:鍊錶中沒有環。
鍊錶中節點的數目範圍在範圍 [0, 104] 內
-105 <= node.val <= 105
pos 的值為 -1 或者鍊錶中的乙個有效索引
解題思路:
方法一:雜湊表
遍歷鍊錶中的每個節點,並將它記錄下來;一旦遇到了此前遍歷過的節點,就可以判定鍊錶中存在環。借助雜湊表可以很方便地實現。
方法二:快慢指標
快指標一次移動兩步,慢指標依次移動一步。將快慢雙指標想象成兩個運動員在賽跑,如果鍊錶有環,那麼終有乙個時刻快慢雙指標會重合。一旦某個節點的next節點出現null,說明不是環形鍊錶,直接返回null即可。
如果是環形鍊錶,我們令其中乙個指標指向虛擬頭節點,而另乙個指標則仍然在相遇的那個節點,一起移動這兩個指標,每次向後移動乙個位置,直到這兩個指標相遇,這個新的相遇點就是鍊錶開始入環的第乙個節點。
leetcode 142 環形鍊錶
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。思路 首先通過快慢指標的方法判斷鍊錶是否有環 接下來如果有環,則尋找入環的第乙個節點。具體的方法為,首先假定鍊錶起點到入環的第乙個節點a的長度為a 未知 到快慢指標相遇的節點b的長度為 a b 這個...
leetcode 142環形鍊錶
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。example 輸入 head 3,2,0,4 pos 1...
Leetcode 142 環形鍊錶
問題重述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。說明 不允...