LinkedList 055 鍊錶中環的入口結點

2021-10-04 08:42:22 字數 645 閱讀 5291

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出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...