單鏈表成環問題

2021-08-03 08:11:06 字數 866 閱讀 4295

思路一:新建乙個unordered_set

思路二:兩個指標,乙個走得乙個走得慢,如果相遇了肯定是有環的,參考

思路一:

class solution 

return false;

}};

思路二:

#include#include#include#includeusing namespace std;

struct listnode

};class solution

return false;

}};int main()

return nullptr; }

};

思路二:

假設鍊錶中不包含環的部分長度為a,環的長度為n

那麼速度為1的指標與速度為2的指標必然相遇於環上  n-a%n的位置…

這時候讓兩個指標分別從head以及剛剛的交點出發,交點必然是交接點!

//判斷環從什麼地方開始

if(slow==head)return head;//正好交於開始

fast = head;

while (true)

return fast;

}};默默想到貪吃蛇,2333

判斷單鏈表是否成環

成環 可以是迴圈單鏈表,即首位相連 也可以是部分成環,即尾部和其他節點相連。判斷是否成環 使用快慢指標遍歷鍊錶 慢指標 從頭節點開始,一次跳乙個節點。快指標 從頭節點開始,一次跳兩個節點。如果是成環的,這兩個指標一定會相遇。如上圖所示,藍色表示慢指標,紅色表示快指標,他們在經過4次遍歷後相遇,也就是...

單鏈錶環問題

給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?5 如果存在環,求出環上距離任意乙個節點最遠的點 對面節點 6 擴充套件 如何判斷兩個無環鏈表是否相交 7 擴充套件 如果相交,求出第乙個相交的節點 解法 1 對於問題1...

判斷單鏈表是否成環演算法

演算法思想 定義兩個指標p,q,其中p每次向前移動一步,q每次向前移動兩步,所以就成p為慢指標,q為快指標。那麼如果單鏈表存在環,則p和q進入環後一定會在某一點相遇,因為進入環後就會一直迴圈下去,否則q將首先遇到null,就說明不存在環。這裡肯定會有人問,就是為什麼當單鏈表存在環時,p和q一定會相遇...