鍊錶中環的入口節點

2021-10-01 06:45:23 字數 980 閱讀 8294

如果鍊錶中包含環,如何找出環的入口節點?

第一步:確定是否有環

第二步:找到環的入口

}//判斷是否有環並返回相遇的節點

public

static listnode hascycle

(listnode head)

}return null;

}//找入口節點

public

static listnode entryofloop

(listnode head)

//計算環中節點數

int n =1;

listnode p = meetnode;

while

(p.next != meetnode)

listnode p1 = head;

listnode p2 = head;

//p1先走n步

while

(n--!=0

)//p2, p1再一起走,直到相遇,相遇點即為環的入口節點

while

(p1 != p2)

return p1;

//返回入口節點

}public

static

void

main

(string[

] args)

else

} tail.next = entrynode;

//尾節點與入口節點相連形成環

system.out.

println

(entryofloop

(head)

.val)

;//列印第三個節點的值

}}

鍊錶中環的入口節點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路 通過141題,我們知道可以通過快慢指標來判斷是否有環,現在我們假設兩個指標相遇在z點,如圖 那麼我們可以知道fast指標走過a b c b slow指標走過a b 那麼2 a b a b c b 所以a c 那麼此時讓slow回到起點,fast依然...

鍊錶中環的入口節點

題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。演算法描述 受之前的面試題的啟發,如果我們在乙個有環的鍊錶中設定兩個鍊錶指標,乙個快,乙個慢,那麼兩個鍊錶指標相遇的時候,必然是位於鍊錶中的某個結點,利用這個結點,當我們從這個結點開始繼續遍歷,當再一次回到這個結點的時候,我們可以統計出環中的結...

鍊錶中環的入口節點

題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。解題思路 假設x為環前面的路程 黑色路程 a為環入口到相遇點的路程 藍色路程,假設順時針走 c為環的長度 藍色 橙色路程 第一步 找環中相匯點。分別用p1,p2指向鍊錶頭部,p1每次走一步,p2每次走二步,直到p1 p2找到在環中的相匯點。此時...