(递归实现)
初始链表:
求链表 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