递归:反转链表

Posted 我家大宝最可爱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归:反转链表相关的知识,希望对你有一定的参考价值。

反转链表

这个问题跟移除链表指定元素非常的相像,我在下图直接给了一种方法,但是遇到了一个问题
移除指定元素的时候我们是直接返回head节点的,但是这个问题要求的是反转链表,需要将原始链表最末尾的元素作为返回,也就是说当我们递归到停止条件之后将最后一个元素返回即可,并且每次递归返回都是这个元素

看了别人的解法之后,我重新梳理了一下

其中有一点也比较有意思,既然sr每次的返回的结果都是一样的(都是在最后一个元素),那么是不是放在哪个位置都可以,肯定不是的,例如下面这种位置就是不对的

 head.next.next = head
 head.next = None
 last = self.reverseList(head.next) # 此时head.next=None,有问题的

下面是最终代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if head is None or head.next is None:
            return head
        
        last = self.reverseList(head.next) # 为了返回最后一个元素,我们不断去递归深入下去,直到终止条件
        head.next.next = head
        head.next = None
        return last # 不管前面怎么处理,就直接返回最后一个节点

以上是关于递归:反转链表的主要内容,如果未能解决你的问题,请参考以下文章

反转链表递归迭代

反转链表递归迭代

反转链表递归迭代

反转链表递归迭代

剑指offer 反转链表

反转链表(两种Python解法)