55 鍊錶中環的入口結點

2021-09-27 18:48:12 字數 938 閱讀 3466

題目描述:給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

【分析】

1.得出鍊錶中環內節點數n:

使用快慢指標,乙個每次走一步,乙個每次走兩步。

兩指標相遇,表明鍊錶中存在環,且相遇的結點一定在環中。

從相遇結點出發邊移動邊計數,直至再次回到此結點,得出環中結點數n。

2.用兩個指標p1,p2:

p1先移動n步,然後p1,p2同步移動,當兩指標相遇時,相遇的這個節點必在環內,然後從這個節點開始,迴圈計數,得出環內節點數n。

p_slow=p_slow->next;//一次1步

p_quick=p_quick->next;//一次2步

if(p_quick!=null)

}if(p_slow==null)

return null;

int n=1;//統計環內的節點數,第乙個點也是在環內的

listnode* p1=phead;

while(p1->next != p_slow)//直到回到相遇的節點結束,p_slow迴圈,p_quick沒變

/*2.開始找入口節點*/

p1=phead;//p1置頭結點

listnode* p2=phead;//兩個指標p1,p2

for(int i=0;inext;

}while(p1!=p2)//p1,p2開始同步移動,相遇的地方就是環入口節點

return p1;}};

55 鍊錶中環的入口結點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路一 使用乙個集合unordered set來儲存已經訪問過的結點,當第一次訪問到已經被訪問過的結點時,即為環的入口結點,此方法需要額外的空間進行輔助。一 struct listnode class solution else phead phead ...

55 鍊錶中環的入口結點

題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。struct listnode class solution 兩個指標乙個fast 乙個slow同時從乙個鍊錶的頭部出發 fast一次走2步,slow一次走一步,如果該鍊錶有環,兩個指標必然在環內相遇 此時只需要把其...

55 鍊錶中環的入口結點 python

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。思路如果slow走了l的長度那麼fast走了2l 假設從開始到入口點的長度是s,slow在環裡走的長度是d 那麼 l s d 假設環內slow沒走的長度是m,fast走的長度是n m d d s 2l 帶入得n m d d s...