我有一个关于python中的链表的快速问题。在解决方案的代码如下所示,当我试图合并两个排序链表。我对所包含的if和elif语句的条件感到困惑。例如,如果l1不为空,l2为空,我想将l1的其余3个元素添加到我的新链表中,但是代码显示l1和tail没有更新,所以它不只是添加3个元素中的一个吗?
我的另一个问题是关于返回头下一个。会自动返回头部的每个节点。旁边的空ptr?谢谢!
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
head = ListNode()
tail = head
while l1 and l2:
if l1.val < l2.val:
tail.next = l1
l1 = l1.next
else:
tail.next = l2
l2 = l2.next
tail = tail.next
if l1:
tail.next = l1
#why don't I update l1 and tail
elif l2:
tail.next = l2
#why don't I update l2and and tail
return head.next
#does returning head.next return every single value from head.next to null?
你正在使用一个链表,所以如果你指向一个特定的节点,而这个节点在它的下一个节点上有更多的节点,那么你就会得到它们。
那么这里有什么问题呢?
其实没什么。你返回的是head -> next
,所以基本上你返回的是整个链表。如果像这样遍历列表:
merged_list = solution.mergeTwoLists(lst1, lst2)
while merged_list:
print(str(merged_list.val), end = ' -> ')
merged_list = merged_list.next
print(merged_list)
例如,如果您有以下链表lst1
和lst2
定义如下:
lst1 = ListNode(1)
lst1.next = ListNode(6)
lst1.next.next = ListNode(3) # So lst1 is basically 1 -> 6 -> 3 -> None
lst2 = ListNode(4)
lst2.next = ListNode(5)
lst2.next.next = ListNode(2) # And lst2 is basically 4 -> 5 -> 2 -> None
那么你将得到最终结果:
1 -> 4 -> 5 -> 2 -> 6 -> 3 -> None
这正是你在代码中应用的。