快慢指標二

2022-03-06 09:34:21 字數 605 閱讀 3851

上次看到的題目僅是判斷是否有環,如果要求出環的起點位置又該如何呢?

這裡看到關於快慢指標的證明,感覺有必要記下來下。

假設煉表頭到環頭距離k,環長度n,指標相遇位置距離環頭為x,慢指標直到相遇時移動距離為m

那麼有m=k+x+pn,2m-m=qn;

那麼有qn=k+x+pn,即k+x=(q-p)n;

可以發現從表頭到相遇位置的距離是環長的整數倍。

那麼,將slow或者fast任意乙個指標從相遇位置直接移動到表頭。

然後while(slow!=fast)slow++,fast++(這裡fast也只一次一步)

那麼最後slow=fast時,一定是環頭位置。

node *  f(node*head)

fast=head;

while(fast!=slow)

return

fast;

}

不過這種方法比較tricky,學c++的應該想到這樣的方法、

map看到這個容器自然就該知道接下來怎麼寫了

node * f(node*head)

return

head;

}

快慢指標 雙指標

雙指標 二 左右指標的常用演算法 鏈結 利用快慢指標 最開始slow與fast指標都指向鍊錶第乙個節點,前者解決主要解決鍊錶中的問題,listnode detectcycle listnode head slow head while slow fast return slow 設相遇點距環的起點的...

快慢指標問題

快慢指標可以用來檢測鍊錶是否有環,問題是為什麼快指標一定會追上慢指標呢?從數學的角度,當快指標步長為2時,慢指標走完一圈,此時快指標走完2圈,必定在第乙個節點相遇 以此類推,當快指標步長為n時,慢指標走完一圈,此時快指標走完n圈,必定會在第乙個節點相遇,但是初次遇見未必是在第乙個節點 有意思的是從物...

快慢指標(一)

快慢指標的概念 該方法會在乙個鍊錶內使用速度不同的兩個指標,來解決一些鍊錶中的實際問題。該方法的主要應用場景 判斷乙個鍊錶中是否含有環 若乙個鍊錶中含有環,找到環路開始的位置 判斷乙個鍊錶是否是回文鍊錶 尋找一組數中的重複數 本篇文章先介紹前兩個應用。判斷乙個鍊錶中是否有環 判斷乙個鍊錶中是否有環,...