鍊錶中環的入口結點

2021-08-03 22:01:19 字數 830 閱讀 2195

題目:

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。

解法一:

定義指標p1和p2指向鍊錶的頭結點。假設鍊錶中的環有n個結點,指標p1先在鍊錶走n步,然後兩個指標以相同的速度前進。因為p1總是比p2多走n個結點,在進入環之後,當兩個指標相遇時,相遇點則為環的入口結點。

**如下:

class solution 

p1=phead;

for(int i=

0;ilistnode *p2=phead;

while(p1!=p2)

return p1;

}private:

listnode *meetingnode(listnode *phead)

return

null;

}};

解法二:

找到環中相遇點。分別用p1,p2指向煉表頭結點,p1每次走一步,p2每次走2步,直到p1==p2找到環中相遇點。

找環入口。假設起點到相遇點距離為x,起點到環入口點距離為y,環長度為r,則當p1==p2時,有2x-x=nr,n為快指標在環中走的圈數。由上可知,環中相遇點距環入口距離為x-y,若此時p2從頭結點開始以步長為1的速度開始走y步之後,剛好到達環入口,此時慢指標距環入口點的距離為x-y+y=x=nr,即為環入口點,即兩個指標相遇。

**如下:

listnode* entrynodeofloop(listnode* phead)

if(p1==p2)

return p1;}}

return

null;

}

鍊錶中環的入口結點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。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,此...