如何判斷雙向鍊錶是否有環

2021-09-29 09:18:53 字數 534 閱讀 9230

之前參加某面試,考了唯一一道演算法題,感覺自己答的不好,在此記下這慘痛的教訓!

題目是如何判斷雙向鍊錶中是否存在環,如下圖:

當時可能也是緊張,並且之前做過判斷單鏈表是否有環的題目,所以就too young too ******的回答按照單鏈表的方法進行判斷,即 在頭部放兩個指標,p1,p2,,p1每次向後移動一步,p2每次向後移動兩步,當p2追上p1時,代表有環,並通過一些方法可以確定出現環的位置;當p2為nullptr時,代表沒環。(也可以使用hash表的方法,空間複雜度就是o(n)。)

其實這題跟單鏈表判斷環的方法相似,只是當判斷next指標不會出現環時,要從尾節點按照之前的方法向頭結點掃瞄,判斷pre指標是否可能出現環,如圖環2。當然如果在第一步判斷鍊錶有next環後是無法進行第二步判斷的,因為你永遠找不到尾節點。

還有就是,凡是這種涉及到指標的題目一定要判斷輸入會不會是nullptr的問題,這是最基本的,什麼都不會也要說出這點啊!!!

如何判斷鍊錶是否有環 鍊錶是否有環的判斷

對於鍊錶是否存在環,有三個問題需要考慮 1.是否有環 2.入環節點 3.環的長度 第一種方法快慢指標法,也稱之為龜兔演算法,設定兩個指標,慢指標和快指標。最開始均指向鍊錶的頭節點,之後,快指標每次後移兩個節點,慢指標每次後移乙個節點。1.如果快指標指向空,則鍊錶無環 2.若快指標和慢指標再次指向乙個...

如何判斷鍊錶是否有環

背景 例如在乙個大的系統中,如果出現兩個鍊錶相交的情況,而且釋放其中乙個鍊錶所有的節點,那就會造成資訊的丟失,並且釋放其中乙個鍊錶的所有節點,那就會造成資訊的丟失並且與之相交的鍊錶也會受到影響,如下圖 給出兩個單鏈表的頭指標 h1,h2 假設兩個鍊錶均不帶環 方法一 判斷第乙個鍊錶所有的節點是否在第...

如何判斷鍊錶是否有環

這個問題可以衍生出很多擴充套件性的問題 給定乙個單鏈表,1.如何判斷是否有環 2.如何知道環的長度 3.如何找到環的入口 4.整個鍊錶的長度是多少 相應的解法如下 問題1時後面所有問題的根問題,解決這個問題一般用到快慢指標,乙個fast指標,乙個slow指標,兩個指標同時指向單鏈表的頭結點,然後fa...