(遞歸實現)
初始鏈表:
求鏈表 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