LeetCode 142 環形鍊錶 II

2021-10-24 10:24:42 字數 1228 閱讀 3056

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。

說明:不允許修改給定的鍊錶。

示例1:

輸入:head = [3,2,0,-4], pos = 1

輸出:tail connects to node index 1

解釋:鍊錶中有乙個環,其尾部連線到第二個節點。

思路:和上乙個題解法相似,這裡先採用快慢指標判斷單鏈表是否有環,如果有環則找尋入環節點。因為快指標走兩步,慢指標走一步,因此相同時間內快指標走的路程是慢指標的兩倍。如下圖:

如上圖所示,假設a為入環口,a為煉表頭到入環口的距離,b為快慢指標第一次相遇的點,b為入環口a到第一次相遇點b的距離(順時針方向),c為這個環剩下的距離(也就是b到a的順時針距離)。

當快慢指標第一次相遇時,慢指標走的距離是a+b,快指標走的距離是a+b+c+b,快指標的速度是滿指標的兩倍,因此得出等式(a+b+c+b)=2*(a+b)==>c=a,也就是說,現在我們要找入環口位置,只需要慢指標繼續走,重新定義乙個指標指向頭節點,兩個指標同步走,相遇時候就是入環口位置.

**:

/**

* definition for singly-linked list.

* class listnode

* }*/public

class

solution}if

(flag)

return fastnode;

}else

}}

擴充套件(求環的大小)

法1、找到環之後,快慢指標繼續走,由於快指標速度是滿指標的兩倍,因此再次相遇時走過的正好是環大小。

法2、如果要求環的大小,那麼我們只需要從入環口位置出發,一步步移動指標,當再次到達入環口位置則可以計算出環的大小。

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 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。說明 不允...