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

求助:递归实现链表按因子缩放函数测试出现Node对象异常

链表缩放函数递归实现问题排查

需求与示例

需要实现一个递归函数scale,输入链表和缩放因子,返回每个节点值按因子缩放后的新链表。示例如下:

scale(linkify([1, 2, 3]), 2)
# 预期输出:2 -> 4 -> 6 -> None

已实现代码

列表转链表函数linkify

from typing import Optional

class Node:
    def __init__(self, data, next=None):
        self.data = data
        self.next = next

def linkify(item: list[int]) -> Optional[Node]:
    """Return a Linked List of Nodes with same values and same order as input list."""
    if len(item) == 0:
        return None
    elif len(item) == 1:
        return Node(item[0], None)
    else:
        return Node(item[0], linkify(item[1:]))

递归实现的scale函数

def scale(head: Optional[Node], factor: int) -> Optional[Node]:
    """Returns new linked list of nodes where each value in original list is scaled by scaling factor."""
    if head is None:
        return None
    else:
        return Node(head.data * factor, scale(head.next, factor))

问题现象

测试时出现类似exercises.ex11.linked_list.Node object at 0x0000013392C97C10>的输出,且测试用例断言失败。测试用例如下:

def test_scale_factor() -> None:
    linked_list: list[int] = [1, 2, 3]
    linked_list_2: list[int] = [2, 4, 6]
    assert is_equal(scale(linkify(linked_list), 2), linkify(linked_list_2))

排查与解决方案

1. 输出显示问题

你看到的Node object at ...是Python默认打印对象的格式,并非scale函数逻辑错误,而是Node类未自定义字符串输出方法。添加以下方法到Node类即可显示预期的链表格式:

def __repr__(self):
    current = self
    parts = []
    while current:
        parts.append(str(current.data))
        current = current.next
    parts.append("None")
    return " -> ".join(parts)

2. 断言失败的核心原因

如果测试断言失败,大概率是is_equal函数的实现问题。确保它是递归比较每个节点的数据和后续节点,而非直接比较对象身份。正确的is_equal实现如下:

def is_equal(l1: Optional[Node], l2: Optional[Node]) -> bool:
    if l1 is None and l2 is None:
        return True
    if l1 is None or l2 is None:
        return False
    return l1.data == l2.data and is_equal(l1.next, l2.next)

3. 验证scale函数逻辑

你的scale函数递归逻辑是正确的:

  • 终止条件:输入链表为空时返回None
  • 递归步骤:创建新节点,值为原节点数据乘缩放因子,next指向递归处理下一个节点后的结果

只要修复上述两个问题,测试用例即可正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:10:34