LeetCode 142 環形鍊錶 II

2021-10-11 02:27:17 字數 1060 閱讀 7006

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 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 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。說明 不允...