我是编程新手,正在编写LeetCode#21合并两个排序列表.

举个例子: 输入:List1=[1,2,4],List2=[1,3,4] 输出:[1,1,2,3,4,4]

此问题的常见解决方案是:

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

    class Solution:
        def mergeTwoLists(self, list1: ListNode, list2: ListNode) -> ListNode:
            dummy = ListNode()
            tail = dummy

            while list1 and list2:
                 if list1.val < list2.val:
                    tail.next = list1
                    list1 = list1.next
                 else:
                    tail.next = list2
                    list2 = list2.next
                 tail = tail.next

            if list1:
                 tail.next = list1
            elif list2:
                 tail.next = list2

            return dummy.next

我搞混了最后一行:返回哑巴.下一行

它不应该简单地返回虚拟 node 的下一个 node 吗? 这将如何返回整个名单?

推荐答案

Dummy被创建为临时头部,因为在开始时,我们不知道头部是以list1开头还是以list2开头.

在我们完成合并后,DUMMY将看起来像这样.伪值为0,因为这是调用ListNode()时的默认值.

0 > 1 > 1 > 2 > 3 > 4 > 4

但是我们的原始列表没有0,因此0被dummy.next删除

笨蛋.下一个会是这样的.

1 > 1 > 2 > 3 > 4 > 4

这将返回整个列表,因 for each ListNode都将其next值存储在self.next属性中.

你可以用这个核对一下.当链表的self.next为NONE时,我们知道我们已经到达链表的末尾 node .

current = dummy.next;
while current is not None:
    print(current.val);
    current = current.next;

Python-3.x相关问答推荐

PYSMB中的进度条

如何将值映射到具有上限和下限的新列

Python中提取每个组/ID所属特定列中的自然数

如何在python 3.10中将列表项(字符串类型)转换为模块函数

段落中句子的索引

使用正确的数据类型时,使用 Cerberus 验证 JSON 架构会引发错误

在不使用字符串方法的情况下查找字符串最后一个单词的长度 - Python

Pythonic,自定义警告

使用 distutils 分发预编译的 python 扩展模块

TensorFlow:dataset.train.next_batch 是如何定义的?

__new__ 方法给出错误 object.__new__() 只接受一个参数(要实例化的类型)

如何配置 Atom 以运行 Python3 脚本?

Python中调用者函数的访问变量

如何正确创建自定义文本编解码器?

Pyodbc:登录超时错误

python - 使用 matplotlib 和 boto 将绘图从内存上传到 s3

带有自定义标头的 urllib.urlretrieve

尾部斜杠的 FastAPI 重定向返回非 ssl 链接

如何删除目录? os.removedirs 和 os.rmdir 是否只用于删除空目录?

在 Meta 中创建具有动态模型的通用序列化程序