【面試】鏈表反轉

(遞歸實現)

初始鏈表:

求鏈表 A->B->C->D 的反轉鏈表, 可以先求 B->C->D 的反轉鏈表 D->C->B,然後將 A 連在B後面就完成了。

這就將原問題轉變爲求更小的子問題:求 B->C->D 的反轉鏈表 ...... 依次往下轉變就行。

我們從最內層開始看鏈表的各個狀態,假設Head鏈表爲傳入函數的參數,NewHead 爲內層函數向上返回的鏈表。

最內層狀態:

次內層狀態:

倒數第三層鏈表狀態:(這一層第一個圖中NewHead指向的是d節點)

最外層狀態:

函數最外層返回鏈表NewHead,即原鏈表pHead的反轉。

class Solution:
    # 返回ListNode
    def ReverseList(self, pHead):
        # write code here
        if not pHead or not pHead.next:
            return pHead
        NewHead = self.ReverseList(pHead.next)
        pHead.next.next = pHead
        pHead.next = None
        return NewHead
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章