題目要求
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點
分析 (1)一種比較偷懶的方法就是遍歷鍊錶,並直接利用hashmap來儲存已經遍歷過的結點。一旦發現已經儲存過的結點,那麼該結點就是環的入口結點。
(2)參考自
我簡單畫了乙個圖(上傳之後一直是橫過來的。。。不知道為什麼轉不正)
設定兩個指標p1和p2,乙個快指標,每次走兩步,乙個慢指標,每次走一步。因為鍊錶有環,所以它們一定會相遇。此時假設慢指標走了 x 步,那麼快指標就是走了 2 * x 步,而且此時快指標肯定是繞著環多走了n圈。假設環的長度為r。那麼有 2 * x - x = n * r 。再假設煉表頭到環的入口結點距離為y,那麼從環的入口結點走到相遇點,則是走了x-y的距離。然後使兩個指標乙個從煉表頭結點開始走,乙個從相遇點開始走,每次都走一步。無疑從煉表頭結點再走y就走到了環的入口結點;相遇點走y步,x-y+y = x,x是r的整數倍,那麼也是走到了環的入口結點。
我的**1
public listnode entrynodeofloop(listnode phead) else
phead = phead.next;
}return loopnode;
}
public listnode entrynodeofloop2(listnode phead)
if(p2 == null || p2.next == null) return
null;
p1 = phead;
while(!p1.equals(p2))
if(p1.equals(p2)) return p1;
return
null;
}
鍊錶中環的入口結點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。class listnode public class solution return p1 return null 分析 假設鍊錶的起始點到環的入口點節點數為k,環的的節點數為x,讓p2的速度是p1的兩倍,p1和p2相遇在環的第y各節點,可以得到如下等...
鍊錶中環的入口結點
題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路1 設環中結點數是n,環的入口位置是x 距離起點走多少步 用快慢指標p,q,q移動的速度是p的2倍,當兩個指標相遇時p走的步數是y,q走的步數是2y,q比p多走k個環的距離,即 2y y kn,則y kn。p距離環的入口點的距離為y x,此...
鍊錶中環的入口結點
題目 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。解法一 定義指標p1和p2指向鍊錶的頭結點。假設鍊錶中的環有n個結點,指標p1先在鍊錶走n步,然後兩個指標以相同的速度前進。因為p1總是比p2多走n個結點,在進入環之後,當兩個指標相遇時,相遇點則為環的入口結點。如下 class solution ...