leetcode 142 環形鍊錶II(鍊錶)

2021-09-24 12:24:34 字數 1176 閱讀 1356

(1)設定快慢指標,快指標一次走2步,慢指標一次走1步;如果快指標遍歷到空指標,則鍊錶沒有環;否則快指標將追上慢指標,兩個指標在環內相遇

(2)快指標從頭以相同步長同慢指標開始遍歷,兩個指標將在環的入口處相遇(有對應數學證明)

簡單的證明如下:

設slow在第一階段走的路程為k,則fast走的路程為2k,同時設從起點到入口節點的長度為l,環的長度為c

則slow走到環內的位置x = k - l,slow相對入口節點的距離為x。又因為fast和slow在圈內相遇,fast在圈內的位置=slow在圈內位置(fast多走了一圈環),則有2k-l = x + k

證明第二階段fast和slow會在入口處相遇

第二階段,slow最終在環內的位置為x+l = x + (k-x) = kk%k = 0,即此時到達的是環的入口節點!!這就證明了第二階段fast和slow相遇的點為環的入口節點

複雜度分析

時間複雜度:o(n)

空間複雜度:o(1)

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

while

(fast!=

nullptr

&& fast!=slow)

;// fast和slow在環內相遇; 則表示有環存在

if(fast ==

nullptr

&& slow!=

nullptr

)return

nullptr

;// fast為空沒有環

// fast從頭以相同步長遍歷,相遇節點為第乙個節點

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