递归:反转链表
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 # 不管前面怎么处理,就直接返回最后一个节点
以上是关于递归:反转链表的主要内容,如果未能解决你的问题,请参考以下文章