給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
思路:1.判斷鍊錶中有環 -> 2.得到環中節點的數目 -> 3.找到環中的入口節點
public
class
solution}if
(!flag)
else
l = f = phead;
for(
int i =
0; i < n; i++
)while
(l != f)
return l;}}
}
方法二
環前面的路程 = 數個環的長度(為可能為0) + c - a
c - a為相遇後剩下的路程
1.找到相遇點 -> 2.新建指標從頭結點開始走,慢結點也開始走,相遇則是入口節點。
public
class
solution
return slow2;}}
return null;
}}
23 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。題解 首先是確定鍊錶中有環,第二步是找到鍊錶的入口。在確定是否有環的過程中,設定乙個快指標,乙個慢指標,快指標一次走兩步,慢指標一次走一步,如果兩個指標可以相遇,證明存在環。在找鍊錶入口結點的過程中,定義兩個指標p1 p2指向...
23 鍊錶中環的入口結點
nowcoder 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。要求不能使用額外的空間。使用雙指標,乙個快指標 fast 每次移動兩個節點,乙個慢指標 slow 每次移動乙個節點。因為存在環,所以兩個指標必定相遇在環中的某個節點上。假設環入口節點為 y1,相遇所在節點為 z1。假設快指標 fast ...
鍊錶中環的入口結點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。class listnode public class solution return p1 return null 分析 假設鍊錶的起始點到環的入口點節點數為k,環的的節點數為x,讓p2的速度是p1的兩倍,p1和p2相遇在環的第y各節點,可以得到如下等...