題目:
題解:假設該表是環形鍊錶,鏈式部分長度為a
aa,環形部分長度為b
bb。定義快指標fas
tfast
fast
和慢指標slo
wslow
slow
,先讓fas
tfast
fast
每次走兩步,slo
wslow
slow
每次走一步,直到兩者相遇;接著讓fas
tfast
fast
重置回頭結點,fas
tfast
fast
和s lo
wslow
slow
都每次走一步,可以證明fas
tfast
fast
走a
aa步後剛好和slo
wslow
slow
相遇。假設第一次slo
wslow
slow
走了( a+
k)
(a+k)
(a+k
)步,那麼fas
tfast
fast
走了( a∗
2+k∗
2)
(a*2+k*2)
(a∗2+k
∗2)步,且有(a+
2∗k)
%b==
k%
b(a+2*k)\%b==k\%b
(a+2∗k
)%b=
=k%b
;接著fas
tfast
fast
從頭開始,走a
aa步後,剛進入環形圈,要證明slo
wslow
slow
也剛好走到環形圈起點,即證(a+
k)%b
==
0(a+k)\%b==0
(a+k)%
b==0
。在式子(a+
2∗k)
%b==
k%
b(a+2*k)\%b==k\%b
(a+2∗k
)%b=
=k%b
兩邊減去k
kk,得證。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
while
(fast != slow)
; fast = head;
while
(fast != slow)
return slow;}}
;
環形鍊錶II 快慢指標
參考於 注意要用距離 幾何來理解這道題 使用快慢指標 definition for singly linked list.class listnode def init self,x self.val x self.next none class solution def detectcycle s...
460 快慢指標解環形鍊錶 II
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。說明 不允許修改給定...
環形鍊錶(快慢指標法)
給定乙個鍊錶,判斷鍊錶中是否有環。如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意 pos 不作為引數進行傳遞,僅僅是為了標識...