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