快慢指標在鍊錶中的應用

2022-07-01 23:51:12 字數 790 閱讀 1755

快慢指標指的是定義兩個指標,這兩個指標的移動速度一快一慢,以此來製造出自己想要的差值,這個差值可以讓

我們找到鍊錶上相應的結點。一般情況下,快指標的移動步長為慢指標的兩倍

利用快慢指標,我們把乙個鍊錶看成乙個跑道,假設a的速度是b的兩倍,那麼當a跑完全程後,b剛好跑一半,以

此來達到找到中間節點的目的。

如下圖,最開始,slow與fast指標都指向鍊錶第乙個節點,然後slow每次移動乙個指標,fast每次移動兩個指標。

使用快慢指標的思想,還是把鍊錶比作一條跑道,鍊錶中有環,那麼這條跑道就是一條圓環跑道,在一條圓環跑道

中,兩個人有速度差,那麼遲早兩個人會相遇,只要相遇那麼就說明有環。

當快慢指標相遇時,我們可以判斷到鍊錶中有環,這時重新設定乙個新指標指向鍊錶的起點,且步長與慢指標一樣

為1,則慢指標與「新」指標相遇的地方就是環的入口。

由上推導可知,當快慢指標相遇後,定義乙個新指標,與慢指標速度相同,則新指標與慢指標將會在入口處相遇。

在證明鍊錶是否有環的過程中,快慢指標第一次相遇。此後,快指標繼續按一次兩步的速度走,慢指標按一次一步的速度走,並設定乙個計數器count = 0,每走一次加1,。當快慢指標再次相遇時,快指標剛好比慢指標多走了r步,而計數器count == c。

以奇數個數節點的的環為例

恰好在慢指標走完一圈後相遇,1-->2, 2-->3…… 7-->1

此時count=7=c

以偶數個數節點的環為例

同樣,恰好在慢指標走完一圈後相遇,1-->2, 2-->3…… 8-->1

此時count=8=c

快慢指標在鍊錶中的應用

快慢指標也是面試中的乙個常考知識點,主要是鍊錶的問題中應用較多。設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fast先行頭到尾部為null,則為無環鏈表 程式如下 0...

快慢指標在鍊錶的應用

快慢指標中的快慢指的是移動的步長,即每次向前移動速度的快慢。例如可以讓快指標每次沿鍊錶向前移動2,慢指標每次向前移動1次。1 判斷單鏈表是否為迴圈鍊錶 演算法 讓快慢指標從煉表頭開始遍歷,快指標向前移動兩個位置,慢指標向前移動乙個位置 如果快指標到達null,說明鍊錶以null為結尾,不是迴圈鍊錶。...

鍊錶快慢指標

public listnode removenthfromend listnode head,int n 為了找到要刪除的節點的前乙個節點,所以此處讓fast.next null while fast.next null 此時head為倒數第n個節點的前乙個節點。slow.next slow.nex...