为什么return node.next会返回整个链表



我是编码新手,正在处理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

我对最后一行感到困惑:返回dummy.next

它不应该简单地返回虚拟节点的下一个节点吗?这将如何返回整个列表?

Dummy被创建为一个临时头,因为一开始我们不知道我们的头是以list1还是list2开头。

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

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

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

dummy.next会是这样的。

1 > 1 > 2 > 3 > 4 > 4

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

你可以看看这个。当链表的self.next为None时,我们知道我们已经到达了链表的结束节点。

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

相关内容

  • 没有找到相关文章