要以簡單且最佳的方式找到兩個單鍊錶的交集,您可以使用以下方法。關鍵思想是透過調整較長鍊錶的起點來對齊兩個鍊錶的末端,然後同時遍歷兩個鍊錶以找到交點。
步驟:
- 計算長度:首先,計算兩個鍊錶的長度。
- 對齊起始指標:如果一個清單比另一個清單長,則前進其指標以對齊兩個清單的長度。
- 查找交集:同時遍歷兩個清單。他們相遇的第一個節點是交點。
Java實作:
雷雷
解釋:
ListNode 類別:
- 用值(val)和指向下一個節點(next)的指標表示鍊錶中的每個節點。
getIntersectionNode 方法:
- 計算長度:使用 getLength 方法計算兩個鍊錶的長度。
- 對齊起始指針:如果列表的長度不同,則較長列表的指針會提前以與較短列表的指針對齊。
- 一起遍歷:然後兩個指針同時移動。它們相符的第一個節點是交集節點。
getLength方法:
printList 方法:
主要方法:
- 建立兩個鍊錶:例如1 -> 3-> 5-> 7-> 9-> 11和2-> 4-> 9-> 11,交叉點從節點 9 開始。
- 找到並列印交點:程式將輸出9作為交點。
複雜:
- 時間複雜度: ( O(m + n) ),其中 ( m ) 和 ( n ) 是兩個鍊錶的長度。列表最多遍歷兩次。
- 空間複雜度:( O(1) ),因為只使用了一些額外的指標。
此方法簡單且最優,確保您有效率地找到兩個單鍊錶的交點。
以上是如何在java中以簡單且最佳的方式找到兩個單鍊錶的交集的詳細內容。更多資訊請關注PHP中文網其他相關文章!