题目
来自
解题
1.递归
先看一个简单的链表
Node(2)->Node(1)->None
反转链表步骤
Node(1).next= Node(2)
Node(2).next = None由于Node(2).next = Node(1),所以 Node(2).next.next=Node(2),
所以等于
Node(2).next.next= Node(2)
Node(2).next = None再看这个链表
Node(3)->Node(2)->Node(1)->None
反转链表步骤
Node(3).next.next= Node(3)
Node(3).next = None
Node(2).next.next= Node(2)
Node(2).next = None再增加个节点
Node(4)->Node(3)->Node(2)->Node(1)->None
反转链表步骤
Node(4).next.next= Node(4)
Node(4).next = None
Node(3).next.next= Node(3)
Node(3).next = None
Node(2).next.next= Node(2)
Node(2).next = None可以看到,每多一个节点node,反转步骤增加
node.next.next = node
node.next = None 所以
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
self.reverseList(head.next)
head.next.next = head
head.next = None当head.next = None时即到达链表的最后一个节点,结束递归,返回这个节点
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if head.next==None:
return head
nextNode = self.reverseList(head.next)
head.next.next = head
head.next = None
return nextNode