有環(huán)鏈表找環(huán)入口 如何判斷雙鏈表是否有環(huán)?
如何判斷雙鏈表是否有環(huán)?我猜這個代碼應(yīng)該是檢查列表中是否有鏈接,一個快指針和一個慢指針相遇,表示列表中有鏈接。建議只聯(lián)系單子,不要看這么復(fù)雜的東西,手寫遍歷倒什么的好。代碼是有上下文的,你不能只看一句
如何判斷雙鏈表是否有環(huán)?
我猜這個代碼應(yīng)該是檢查列表中是否有鏈接,一個快指針和一個慢指針相遇,表示列表中有鏈接。建議只聯(lián)系單子,不要看這么復(fù)雜的東西,手寫遍歷倒什么的好。
代碼是有上下文的,你不能只看一句話就能全部理解。如果查看循環(huán)語句的結(jié)束條件,至少應(yīng)該查看循環(huán)中執(zhí)行的操作。
當(dāng)鏈表長度為偶數(shù)時,遍歷到尾部,fast指向null,但循環(huán)不結(jié)束,否則會做出判斷。此時將報告段落錯誤。
如何判斷一個單鏈表是有環(huán)的?
給定一個單鏈表,嘗試判斷單鏈表中是否有環(huán)。答:該算法的思想是設(shè)置兩個指針P和Q,其中P一次向前移動一步,Q一次向前移動兩步。如果單鏈表中有一個環(huán),那么p和Q相遇;否則,Q將首先遇到null。R假設(shè)單鏈表的長度為n,單鏈表是循環(huán)的,那么在第i次迭代中,P指向元素i mod n,Q指向元素2I mod n,所以當(dāng)i≡2I(mod n)時,P和Q滿足。當(dāng)I=n,P和Q滿足時,I≡2I(MOD n)=>(2I-I)MOD n=0=> I MOD n=0=>。這里有一個簡單的理解,就是P和Q同時在操場上跑,Q跑的速度是P的兩倍,當(dāng)他們兩人同時出發(fā)時,P跑一圈就到了起點,Q跑兩圈就到了起點。如果P的起點和Q的起點不同呢?假設(shè)在第I次迭代時P指向元素I mod N,Q指向k2i mod N,其中0