鍊錶中環的入口節點

2021-09-25 18:55:47 字數 1030 閱讀 6862

** 題目:如果乙個鍊錶中包含環,如何找出環的入口節點?**

解決該問題的共分兩步走:

第一步是如何確定乙個鍊錶中是否包含環?

宣告兩個指標,同時從鍊錶的頭節點出發,乙個指標一次走一步,另乙個指標一次走兩步

如果兩個指標相遇,那麼鍊錶就包括環

如果快的指標走到頭了,那麼鍊錶不包括環

第二步是如何找到環的入口?

首先在有環的前提下,兩個指標相遇一定在環的內部,

讓其中乙個環走,走到和另乙個相遇,記錄環的長度

兩個指標都為頭節點,乙個指標先走環的長度,然後再兩個指標一起走,這樣先走的就比另乙個多走了乙個環,他們兩個就可以在入口節點相遇啦

package com.helan.c;

public class nodelistloop

}public static listnode meetingnode(listnode head)

listnode fnode=head;

listnode bnode=head;

while(fnode!=null)else

}return null;

}private static listnode entrynodeofloop(listnode head)

innode=head;

innode1=head;

for(int i=0;i2->3->4->5->6

// ^ |

// | |

// +--------+

private void test02() else

}// 1->2->3->4->5->6 <-+

// | |

// +---+

private void test03() else

}public static void main(string args)

}

鍊錶中環的入口節點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路 通過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找到在環中的相匯點。此時...