在Leetcode的題目中,有些題目會要求你不能使用額外的空間、只能原地反轉linked list,這時就會需要用到 In-place reversal of linked list(原地反轉列表)的技巧了。
先來複習單鏈表(Singly Linked List)的特性
source: Wiki
如何原地反轉?
根據上面的特性,透過逐次反轉指針把整個列表反轉,一次轉向一個指針。
每個節點只會記錄上一個節點的位置(如上圖示,只有節點99會記錄節點12的位置,只有節點37會記錄節點99的位置),所以在轉向指針的過程中,也要記錄轉向前指針所指的節點,否則一旦指針轉向,就再也無法存取該節點。
設定當前的node(節點)為current、前一個node(節點)為previous、下一個node(節點)為next,如下方圖解:
步驟如下:
圖解如下
整體來說,其實就是每次只反轉previous跟current之間的指針。如此反覆步驟,直到所有node(節點)的指針反轉。