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

如何实现支持嵌套场景的Linked List类__str__方法?

解决Linked List的__str__方法嵌套链表格式化问题

你原来的__str__方法只能处理顶层的普通链表,遇到嵌套的Link节点就会失效——因为它没有考虑到self.first本身可能也是一个Link实例的情况。要满足那些嵌套测试用例,我们需要递归处理每个节点的first元素,并且在元素是Link类型时用括号包裹它的字符串结果。

修改后的完整代码

class Link(object):
    empty = ()
    def __init__(self, first, rest=empty):
        self.first = first
        self.rest = rest

    def __str__(self):
        # 处理当前节点的first部分:如果是Link实例,就用括号包裹它的字符串
        first_str = f'({str(self.first)})' if isinstance(self.first, Link) else str(self.first)
        # 如果是链表的最后一个节点,直接返回first的字符串
        if self.rest is Link.empty:
            return first_str
        # 否则递归拼接当前节点和后续链表的字符串
        return f'{first_str} -> {str(self.rest)}'

代码逻辑解释

  1. 处理当前节点的first:判断self.first是否是Link对象,如果是,就递归调用它的__str__方法,再用括号把结果包起来;如果是普通数据(字符串、数字等),直接转成字符串即可。
  2. 判断是否为尾节点:如果self.rest是Link.empty,说明这是链表的最后一个节点,直接返回当前first的字符串。
  3. 递归拼接后续链表:如果不是尾节点,就把当前first的字符串和后续链表的字符串用->连接起来,递归处理后续部分。

验证测试用例

我们来逐个验证你给出的测试场景:

  • str(Link('Hello')) → 'Hello' ✅
  • str(Link(1, Link(2))) → '1 -> 2' ✅
  • print(Link(1 / 2, Link(1 // 2))) → 0.5 -> 0 ✅
  • str(Link(Link(1, Link(2, Link(3))), Link(4, Link(5)))) → '(1 -> 2 -> 3) -> 4 -> 5' ✅
  • print(Link(Link(Link(Link('Wow'))))) → (((Wow))) ✅
  • print(Link(Link('a'), Link(Link('b'), Link(Link('c'))))) → (a) -> (b) -> (c) ✅

所有测试用例都能完美通过啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:04:45