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

链表递归实现疑问:为何取值函数正常,求和函数返回0?

问题根源:Python的参数传递特性

你遇到的问题核心在于Python中可变类型和不可变类型的参数传递机制不同:

  • 第一个函数里的result是列表(可变类型),递归函数recursive_approach里的result.append()是直接修改原列表的内存内容,所以主函数linked_list_values里的result能同步拿到修改后的结果。
  • 第二个函数里的count是整数(不可变类型),递归函数add_nums里的count += head.val本质是创建了一个新的整数对象,而不是修改主函数里最初的那个count变量。主函数里的count自始至终都是初始的0,所以返回0。
解决方法

方法1:用可变类型包装计数(类似取值函数的思路)

把count放到一个列表里(列表是可变类型),这样递归中修改的是列表里的元素,主函数能拿到更新后的值:

def sum_list(head):
    count = [0]
    add_nums(head, count)
    return count[0]

def add_nums(head, count):
    if head is None:
        return 
    count[0] += head.val
    add_nums(head.next, count)

方法2:让递归函数返回累加值(更简洁的递归写法)

不用传递计数参数,而是让递归函数每次返回当前节点值加上后续节点的总和:

def sum_list(head):
    if head is None:
        return 0
    return head.val + sum_list(head.next)

这种写法更符合递归的思想,也不需要额外的辅助函数,代码更简洁。

方法3:迭代实现(非递归)

如果不想用递归,迭代的方式更直观,也不会有参数传递的问题:

def sum_list(head):
    total = 0
    current = head
    while current is not None:
        total += current.val
        current = current.next
    return total

测试以上任意一种写法,传入你的测试链表2 -> 8 -> 3 -> -1 -> 7,都会返回正确的19。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:00:27