leetcode 鍊錶回環問題2

2021-10-21 18:28:45 字數 824 閱讀 8562

問題描述:給定乙個鍊錶,判斷該鍊錶是否是回環鍊錶,如果是,則返回鍊錶環的入口位置,如果不是,則返回空。

演算法思想:(1)遍歷鍊錶,使用hashset來判斷鍊錶中的某個節點是否已經被遍歷過。

(2)雙指標,定義乙個快指標fast和乙個慢指標slow,快指標每次向前移動兩步,慢指標每次向前移動一步。設煉表入環前的長度為a,環內的長度為b,走的環    圈數為n,則兩個指標第一次相遇時,快指標fast走的長度為f=2s(s為slow指標所走長度),f=s+nb(fast指標比slow指標多走了的長度),兩式相減得s = nb,即 兩指標第一次相遇時slow指標走了nb步,而從head指標走到入環口的所有情況的長度為a+nb。即慢指標再走a步即可到達入環口位置,因此當兩指標第一次相遇後,slow指標位置不變,將fast指標重新指向head指標,然後fast指標和slow指標都每次向前移動一步,當兩指標第二次相遇時,就是入環口的位置。

第一種方法**實現:                      

public class cyclelistnode else

node = node.next;

}return null;

}}

第二種方法**實現:

public class cyclelistnode 

fast = fast.next.next;

slow = slow.next;

if(fast == slow)

}fast = head;

while(fast != slow)

return fast;

}}

LeetCode 反轉鍊錶(鍊錶問題)

難度 簡單 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null使用三個listnode,分別是prev,curr,next。curr是當前指標指向的節點,prev是curr的前乙個節點,頭節點的前乙個節點是null,next是curr的下乙個節點,用於遍歷鍊...

leetcode 鍊錶題目2

將兩個鍊錶合二為一,比如鍊錶a 鍊錶b,合併成兩個鍊錶a b和b a。解題思路 將listb加到lista的後面 將lista也加到listb的後面,這樣兩個list等長 class solution return a ptr class solution return head pre next ...

LeetCode 環形鍊錶2

先判斷是否有環,然後再找環內第乙個節點。解題思路 分兩個步驟,首先通過快慢指標的方法判斷鍊錶是否有環 接下來如果有環,則尋找入環的第乙個節點。具體的方法為,首先假定鍊錶起點到入環的第乙個節點a的長度為a 未知 到快慢指標相遇的節點b的長度為 a b 這個長度是已知的 現在我們想知道a的值,注意到快指...