給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
首先 有環的鍊錶長這樣
如果存在環 那麼因為fast 和slow 速度不一樣 他們總會相遇
fast 和slow 在z1相遇
那麼 fast 走過的路長度 = x+ny+(n-1)z
slow 走過的長度 = x+y
因為fast 是每次移動兩個節點 所以 2(x+y) = x+ny+(n-1)z
但我們需要找的是環的入口結點y1 我們需要知道x的長度
化簡一下 為 x = (n-2)y+(n-1)z = (n-1)(y+z) +z
有圖可知 環的長度為y+z
也就是說如果此時再定義乙個指標slow2 指向頭結點
他們相遇時
slow轉了n圈,又走了z長
slow2剛好指向環的入口結點
注意特值 沒找到返回null
public
class
solution
return slow;}}
return null;
}}
LinkedList 鍊錶
線性表是一種簡單的資料結構,其主要特點是元素之間存在 一對一 的關係,除去第乙個元素,每個元素都存在唯一乙個 前驅節點 除去最後乙個元素都存在唯一乙個 後繼節點 簡單的線性表有 陣列 單鏈表 雙向鍊錶 靜態鍊錶等。順序表 陣列 優缺點 陣列不僅邏輯上,物理上位置也相鄰,可隨機訪問,但刪除或插入元素時...
LinkedList 鍊錶
最近複習到鍊錶 linkedlist 一般來說共有大概有兩種實現方式 1.陣列實現 和 2.鏈式實現。我僅使用了直接鏈式實現,如下。其他的實現方式,大家不妨自己嘗試下吧。author ace yom peizhen zhang date 2015 8 17 description 鍊錶實現 ifnd...
鍊錶 LinkedList
原文中singlelinklist的remove方法有問題,因為是 node current firstnode.getnext 所以導致鍊錶的第乙個節點刪不掉。修改如下 public class singlelinklist 刪除某個節點 param element return 刪除成功返回tr...