class
solution
return fast;}}
return
nullptr;}
};
我沒什麼思路,就是快慢鍊錶floyd環路,學就是了。
乙個快指標每次前進兩個節點,乙個慢指標一次前進乙個節點,如果快指標能走到頭,那麼說明沒有環路,如果快指標走不到頭,快指標和慢指標必相遇。快慢指標第一次相遇時把快指標移到煉表頭,快慢指標第二次相遇的節點就是環路開始的節點。
設頭節點到環路開始節點距離為m
mm慢節點在環路裡走了不足一圈的距離為k
kk,那麼當快結點和慢節點第一次相遇時
2 ∗(
m+k+
n1∗l
)=m+
k+n2
∗l
2*(m+k+n1*l)=m+k+n2*l
2∗(m+k
+n1∗
l)=m
+k+n
2∗l那麼m+k
=(n2
−2∗n
1)∗l
m+k=(n2-2*n1)*l
m+k=(n
2−2∗
n1)∗lll
l為環路長,n1n1
n1為慢節點整圈數環路,n2n2
n2為快節點整圈數。
現在慢節點在圈中k
kk的位置上,再走m
mm必能回到環路頭,所以快結點從煉表頭開始走再走到環路頭也正好是mmm。
142環形鍊錶
題目描述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。題解思路 採用雙指標法,設定乙個快指標,乙個慢指標,它們採取的步長不一樣,如果相遇,就代表鍊錶一定存在環 與環形鍊錶 一致 然後在前邊的迴圈裡利用慢指標尋找入環的第乙個節點,採用標記法,訪問過就標記其val值為99...
142 環形鍊錶
快慢指標,好像和之前的某道題相似 definition for singly linked list.struct listnode struct listnode detectcycle struct listnode head newlow newlow next low low next re...
142 環形鍊錶 II
還是快慢指標的問題,當發現有環時,將fast指向head,fast一次向前移動乙個節點,則fast和slow一定會在環的入口相遇.證明 設s為slow指標走的節點個數,m為環的入口距head的位置 則第一次相遇時,fast和head相對於環入口的位置相同,fast在環中的相對於環入口的位置在 2s ...