思路一:新建乙個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一定會相遇...