Floyd 迴圈檢測演算法(快慢指標法/龜兔指標法)

Acx7 發表於 2022-01-28
演算法

Floyd Cycle Detection Algorithm

  Floyd Cycle Detection Algorithm,即 Floyd 迴圈檢測演算法,又稱快慢指標法、龜兔指標法。該演算法用於判斷連結串列是否存在環,以及判斷環的起點與長度的演算法。

演算法原理

  該演算法基於兩個指標,從頭開始遍歷,一個指標跑得快,另一個指標跑得慢,其中快指標的速度是慢指標的2倍。只要存在環,無論快慢指標從哪裡開始,那麼快慢指標最終一定會相遇,因為快指標沒走一次,都會向慢指標靠近一個節點。

在這裡插入圖片描述

演算法應用

判斷是否有環

  如果存在環,快慢指標必定相遇,反之,如果慢指標走到結尾還沒相遇則不存在環。

求環的長度

  假設存在環,那麼快慢指標必定相遇,假設快慢指標在 X 點第一次相遇,此時再讓兩指標前進,下次相遇時快指標比慢指標多走了一圈,由此即可計算出環長度。

求環的起點

  當快慢指標第一次相遇後,將慢指標指向頭節點,快指標指向相遇點的下一個節點。再次讓快慢指標運動,當快慢指標再次相遇時,相遇點即為環的第一個節點。

相關文章