You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode递归反转链表:为何递归未在基准情形终止?

反转链表递归实现的终止问题分析

你的递归逻辑本身是正确的,基准情形(currpointer.next为None时)会正常终止递归并返回新头节点。你看到的“持续运行”其实是两次独立的递归调用,而非同一次递归未终止,原因如下:

  1. 从输出内容可拆分出两次完整的递归流程:

    • 第一次处理链表 1->2->3->4->5:递归逐层深入到节点5,触发基准情形返回,对应输出前8行;
    • 第二次处理链表 1->2:递归深入到节点2,触发基准情形返回,对应输出最后4行。
  2. 出现两次调用的常见场景:

    • 本地测试时手动调用了两次reverseList方法;
    • LeetCode测试用例包含多组输入(比如同时测试[1,2,3,4,5]和[1,2]两组数据),导致代码被执行两次。

验证递归逻辑是否正确,可单独测试一组输入:比如只传入1->2->3->4->5,此时输出仅会有前8行,递归会在节点5处正常终止并返回正确的反转链表头节点5。

另外,你的代码存在一个边界问题:如果输入链表为空(head为None),调用reverse(head, None)会直接访问currpointer.next导致报错,可在reverseList方法中先做空值判断:

def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
    if not head:
        return None
    return self.reverse(head, None)

内容的提问来源于stack exchange,提问作者user15846642

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:17:30