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

如何打印链表题返回的ListNode类对象(LeetCode合并两个有序链表场景)

合并有序链表VSCode本地调试问题解决

背景

由于LeetCode不对免费用户开放调试器功能,希望在VSCode中模拟LeetCode的测试用例,对应题目为合并两个有序链表。

原始代码

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

    def add_nodes(self, parent, vals):
        while len(vals) > 0:
            node = ListNode(vals[0])
            parent.next = node
            return self.add_nodes(node, vals[1:])


class Solution:
    def mergeTwoLists(self, list1: ListNode, list2: ListNode) -> ListNode:
        l1 = []
        while list1 != None:
            l1.append(list1.val)
            list1 = list1.next
        while list2 != None:
            l1.append(list2.val)
            list2 = list2.next
        l1.sort()
        if l1 == []:
            return None
        new_list = ListNode(l1[0])
        new_list.add_nodes(new_list, l1[1:])
        return new_list

# 原始测试代码(存在问题)
program = Solution()
list = program.mergeTwoLists(ListNode([1, 3, 4]), ListNode([1, 2, 4]))
print(list.__dict__)

预期效果

两个测试链表[1,2,4]和[1,3,4]合并后,打印输出为[1,1,2,3,4,4]。

存在问题

  1. 测试链表构造错误:直接向ListNode构造函数传入列表[1,3,4],只会将整个列表赋值给首节点的val属性,不会生成多节点的链式结构,这也是实际输出里val为[1,2,4]的原因。
  2. 缺少链表遍历逻辑:print(list.__dict__)只能打印当前节点的属性,无法递归遍历所有后续节点输出完整值列表。

修复方案

步骤1:给ListNode添加打印魔术方法

在ListNode类中新增__repr__方法,打印节点时自动遍历整个链表输出为列表格式:

def __repr__(self):
    res = []
    cur = self
    while cur:
        res.append(cur.val)
        cur = cur.next
    return str(res)

步骤2:修正测试链表构造方式

两种正确构造测试链表的方法二选一即可:

  • 链式直接构造:
list1 = ListNode(1, ListNode(3, ListNode(4)))
list2 = ListNode(1, ListNode(2, ListNode(4)))
  • 用已有的add_nodes方法构造:
list1 = ListNode(1)
list1.add_nodes(list1, [3,4])
list2 = ListNode(1)
list2.add_nodes(list2, [2,4])

完整修复后代码

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

    def add_nodes(self, parent, vals):
        while len(vals) > 0:
            node = ListNode(vals[0])
            parent.next = node
            return self.add_nodes(node, vals[1:])
    
    # 新增打印方法
    def __repr__(self):
        res = []
        cur = self
        while cur:
            res.append(cur.val)
            cur = cur.next
        return str(res)


class Solution:
    def mergeTwoLists(self, list1: ListNode, list2: ListNode) -> ListNode:
        l1 = []
        while list1 != None:
            l1.append(list1.val)
            list1 = list1.next
        while list2 != None:
            l1.append(list2.val)
            list2 = list2.next
        l1.sort()
        if l1 == []:
            return None
        new_list = ListNode(l1[0])
        new_list.add_nodes(new_list, l1[1:])
        return new_list

# 修正后的测试代码
program = Solution()
list1 = ListNode(1, ListNode(3, ListNode(4)))
list2 = ListNode(1, ListNode(2, ListNode(4)))
result = program.mergeTwoLists(list1, list2)
print(result)

运行后即可得到预期输出[1, 1, 2, 3, 4, 4]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:05