Faster\Slower 快慢指標的應用

愛做飯的小瑩子發表於2014-07-26

leetcode很多題目都是利用快慢指標來解決題目,下面具體講解下快慢指標。

 

概念

快指標在每一步走的步長要比慢指標一步走的步長要多。快指標通常的步速是慢指標的2倍。在迴圈中的指標移動通常為:faster = faster.next.next, slower = slower.next.

 

應用

1. 用來找中點或中位數

2. 用來判斷連結串列是否有環以及尋找環入口

3. 題目中含有:倒數第n個,那麼設定快指標步長為n,然後快慢指標同時以同一速度走,用慢指標尋找倒數第n個

 

注意

1. 通常需要特別留意連結串列長度的奇偶性

2. 如果快指標步速為慢指標步速2倍,迴圈條件為:faster.next!=null&&faster.next.next!=null

3. 當自行設定快指標步長時, 要考慮步長值等於連結串列長度的特殊情況

4. 查詢倒數第n個時,如果要求刪除連結串列元素時,不要忘記記錄應被刪除元素的前一個元素

相關文章