天天看點

判斷單連結清單是否有環的兩種方法

如圖,如果單連結清單有環,則在周遊時,在通過6之後,會重新回到3,那麼我們可以在周遊時使用兩個指針,看兩個指針是否相等。

判斷單連結清單是否有環的兩種方法

方法一:使用p、q兩個指針,p總是向前走,但q每次都從頭開始走,對于每個節點,看p走的步數是否和q一樣。如圖,當p從6走到3時,用了6步,此時若q從head出發,則隻需兩步就到3,因而步數不等,出現沖突,存在環

方法二:使用p、q兩個指針,p每次向前走一步,q每次向前走兩步,若在某個時候p == q,則存在環。

代碼如下: