求單鏈表是否有環 環長 入環點 鏈長

2021-07-25 07:19:28 字數 1043 閱讀 1038

用兩個快慢指標去判斷單鏈表是否環,快指標的速度是慢指標的兩倍,若單鏈表有環,則兩個指標會先後進入環內,並且快指標會從後面追上慢指標。下面來嚴謹地分析一下兩個指標在環內相遇的情況。

假設此時慢指標s和快指標f都在環內,相隔k點,環內共有r點,t時間之後,兩指標相遇。

[快指標最終位置 = 慢指標最終位置] -> [(2t mod r) + k = (t mod r)] 假設 2t = ar + x, t = br + y, a > b

}

t = (a - b)n - k
我們在上面推導出在環內相遇要經過的時間t,那麼現在從第一次相遇(k=0)開始算,一直到第二次相遇,慢指標剛好走過乙個環長n,即環長等於第一次相遇到第二次相遇,慢指標走的長度。假設第一次相遇點離入環口的距離是x,那麼

快指標走的距離:2s = y + nr + x

慢指標走的距離:s = y + x (慢指標在第一次相遇時,不會走到完整的一環)

-> y = nr - x (n不一定是1,環內的指標可能要轉幾圈才會和環外的指標相遇)
那麼我們在第一次相遇時,把慢指標留在原地,把快指標放回起點head處,然後把快指標變為慢指標,兩個指標一起以速度1前進,當它們相遇時,相遇點就是入環點4

問題2求出環長,問題3求出入環點即y的長度,那麼鏈長只要將它們相加即可。

【reference】

1.2.

求單鏈表是否有環 環長 入環點 鏈長

用兩個快慢指標去判斷單鏈表是否環,快指標的速度是慢指標的兩倍,若單鏈表有環,則兩個指標會先後進入環內,並且快指標會從後面追上慢指標。下面來嚴謹地分析一下兩個指標在環內相遇的情況。假設此時慢指標s和快指標f都在環內,相隔k點,環內共有r點,t時間之後,兩指標相遇。快指標最終位置 慢指標最終位置 2t ...

求有環單鏈表中的環長 環起點 鍊錶長

1.判斷單鏈表是否有環 使用兩個slow,fast指標從頭開始掃瞄鍊錶。指標slow 每次走1步,指標fast每次走2步。如果存在環,則指標slow fast會相遇 如果不存在環,指標fast遇到null退出。就是所謂的追擊相遇問題 2.求有環單鏈表的環長 在環上相遇後,記錄第一次相遇點為pos,之...

求有環單鏈表中的環長 環起點 鍊錶長

求有環單鏈表中的環長 環起點 鍊錶長 1.判斷單鏈表是否有環 使用兩個slow,fast指標從頭開始掃瞄鍊錶。指標slow 每次走1步,指標fast每次走2步。如果存在環,則指標slow fast會相遇 如果不存在環,指標fast遇到null退出。就是所謂的追擊相遇問題 2.求有環單鏈表的環長 在環...