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個時,如果要求刪除連結串列元素時,不要忘記記錄應被刪除元素的前一個元素