給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
1.遍歷單鏈表的每個結點
2.如果當前結點位址沒有出現在set中,則存入set中
3.否則,出現在set中,則當前結點就是環的入口結點
4.整個單鏈表遍歷完,若沒出現在set中,則不存在環
class solution
else
}return nullptr;}};
若不用輔助結構set,該怎麼做呢?這裡畫了一張圖
1.初始化:快指標fast指向頭結點, 慢指標slow指向頭結點
2.讓fast一次走兩步, slow一次走一步,第一次相遇在c處,停止
3.然後讓fast指向頭結點,slow原地不動,讓後fast,slow每次走一步,當再次相遇,就是入口結點。
如上解釋:
如果慢指標slow第一次走到了b點處,距離c點處還有距離y,那麼fast指標應該停留在d點處,且bd距離為y(圖中所示是假設快指標走了一圈就相遇,為了便於分析),
也就是db+bc=2y,(因為fast一次走2步,慢指標一次走1步,並且相遇在c處)
在c點處,此時慢指標slow走的點為abc,距離為x+y,而快指標fast走的點為abcdbc,距離為2x+2y,
又因為:ab=x,bc=y,快指標走了2次bc,所以cdb距離為x,而ab距離也為x。
/*
struct listnode
};*/
class solution
if(!fast || !fast->next) return nullptr;
fast = phead;
while(fast != slow)
return fast;}};
鍊錶中環的入口結點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。class listnode public class solution return p1 return null 分析 假設鍊錶的起始點到環的入口點節點數為k,環的的節點數為x,讓p2的速度是p1的兩倍,p1和p2相遇在環的第y各節點,可以得到如下等...
鍊錶中環的入口結點
題目要求 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點 分析 1 一種比較偷懶的方法就是遍歷鍊錶,並直接利用hashmap來儲存已經遍歷過的結點。一旦發現已經儲存過的結點,那麼該結點就是環的入口結點。2 參考自 我簡單畫了乙個圖 上傳之後一直是橫過來的。不知道為什麼轉不正 設定兩個指標p1和p2,乙...
鍊錶中環的入口結點
題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路1 設環中結點數是n,環的入口位置是x 距離起點走多少步 用快慢指標p,q,q移動的速度是p的2倍,當兩個指標相遇時p走的步數是y,q走的步數是2y,q比p多走k個環的距離,即 2y y kn,則y kn。p距離環的入口點的距離為y x,此...