劍 鍊錶環中的入口節點

2021-08-14 16:53:37 字數 641 閱讀 9174

題目描述:

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

1. 判斷是否為環形鍊錶:設定一快一慢連個節點,慢的一次走乙個節點,快的一次走2各節點。若為環形,則快節點能追趕上慢節點,記此節點為meetnode。

2. 計算環內節點數:meetnode一定在環形內,以它為起點遍歷一圈,得到換內節點數量,記為n。

3. 找的入口節點:設定node1,node2節點同時從頭結點出發,node2先走n步,然後node1、node2同時走,當兩節點相遇時的節點,即為入口節點。

public listnode entrynodeofloop(listnode phead) 

if (n2 == null || n2.next == null)

//計算換內節點數

int count = 1;

n2 = n2.next;

while (n2 != n1)

//尋找入口節點

n1 = phead;

n2 = phead;

for (int i = 0; i < count; i++)

while (n1 != n2)

return n1;

}

劍指Offer 鍊錶中環的入口節點

1.如果鍊錶中有環,可以通過快慢指標,最後快慢指標肯定會相會於環中的某個節點 2.從這個相會的節點開始,當再次遇到該節點,即可統計環中有節點數 n 3.設定兩個指標p,p1,p從頭先走 n 步,p1在頭部,然後兩個指標同時 走,當兩指標相遇時,相遇的節點即是環的入口。c struct listnod...

劍指Offer 鍊錶中環的入口節點

判斷鍊錶中是否有環lo w fa stslow fast 均從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fas tfast 遇到null null 退出。low fas tslow fast 均從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fas...

劍指Offer 鍊錶中環的節點入口

題目 如果鍊錶中存在環,則找出環的入口節點,如下圖,環的入口為節點3 首先要想辦法確認鍊錶中是否有環。鍊錶中有環表明鍊錶中沒有尾節點,因此遍歷的時候會一直迴圈下去永不停止。用乙個指標的話很難確認表中是否有環。因此我們嘗試用兩個指標,讓乙個指標走快一點,乙個指標走慢一點,當兩個指標指向的節點一樣時,可...