leetcode-206.反转链表

168 阅读1分钟

题目

来自 

leetcode-cn.com/problems/re…



解题

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