Easy 876 - Middle of the Linked List
In this blog I will share a solution to the Middle of the Linked List problem.
題目連結
難度:Easy
給定一個單向鏈結串列的頭節點 head,返回該鏈結串列的中間節點。
如果有兩個中間節點,則返回第二個中間節點。
example:
example:
限制
- 鏈結串列中的節點數在範圍 1, 100 內
- 1 <= Node.val <= 100
Linked List
Two Pointers
解題思路
思考過程
- 初步分析
- 需要找出鏈結串列的中間節點
- 如果有兩個中間節點,返回第二個
- 不能使用額外空間
- 解題技巧
- 使用快慢指針(Floyd's Cycle Finding Algorithm)
- 快指針每次走兩步
- 慢指針每次走一步
- 實作重點
- 處理空鏈結串列和單節點的情況
- 注意快指針的邊界條件
- 不需要計算長度
解題步驟
程式碼實現
複雜度分析
面向 | 複雜度 | 說明 |
---|---|---|
時間複雜度 | O(N) | 只需要遍歷一次鏈結串列 |
空間複雜度 | O(1) | 只使用兩個指針,不需要額外空間 |
解題重點
- 快慢指針技巧
- 快指針走兩步,慢指針走一步
- 當快指針到達尾部,慢指針在中間
- 適用於找中點、檢測環等問題
- 邊界處理
- 處理空鏈結串列
- 處理單節點情況
- 處理偶數長度的情況