Python 为什么链表的最后一个元素没有出现在输出中?

Python 为什么链表的最后一个元素没有出现在输出中?,python,linked-list,Python,Linked List,我已经写了一些关于链表的代码,ListNode类。代码的目的是将两个排序链表合并为一个大的排序链表 比如说 输入:L1=[1,2,4],L2=[1,3,4] 输出:[1,1,2,3,4,4] def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: prehead = ListNode(-1) if l1 and l2 == None: retu

我已经写了一些关于链表的代码,ListNode类。代码的目的是将两个排序链表合并为一个大的排序链表

比如说

输入:L1=[1,2,4],L2=[1,3,4]

输出:[1,1,2,3,4,4]

def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        
        prehead = ListNode(-1)
        if l1 and l2 == None:
            return None

        if l1 == None:
            return l2

        if l2 == None:
            return l1

        prev = prehead
        curr1 = l1
        curr2 = l2

        while curr1 and curr2:
            if curr1.val <= curr2.val:
                prev.next = curr1
                curr1 = curr1.next 

            elif curr1.val >= curr2.val:
                prev.next = curr2
                curr2 = curr2.next
                
            prev = prev.next
                

        return prehead.next
def mergetwolist(self,l1:ListNode,l2:ListNode)->ListNode:
prehead=ListNode(-1)
如果l1和l2==无:
一无所获
如果l1==无:
返回l2
如果l2==无:
返回l1
prev=预压头
电流1=l1
curr2=l2
而curr1和curr2:
如果curr1.val=curr2.val:
上一个=当前2
curr2=curr2.next
上一个=上一个
返回,下一个
上面的代码返回[1,1,2,3,4]作为输出,而不是正确答案[1,1,2,3,4,4],我知道原因;这是因为当我们到达L1的最后一个元素时,while循环停止,并且没有考虑L2的最后一个元素

我试图将代码,特别是“while curr1和curr2”行改为“while L1和L2”:

但这为以下行“if curr1.val 有什么想法吗。如何修改代码以产生正确的输出和2。为什么我在更改while行时会出现错误


感谢

问题实际上来自while,因为当两个列表中的一个不再有元素时,使用“and”,我们必须使用“or”,并处理列表为空的情况:

while curr1 or curr2:
    if curr1 and (not curr2 or curr1.val <= curr2.val):
        prev.next = curr1
        curr1 = curr1.next 

    elif not curr1 or curr1.val >= curr2.val:
        prev.next = curr2
        curr2 = curr2.next
                
    prev = prev.next
当前1或当前2时:
如果curr1和(非curr2或curr1.val=curr2.val):
上一个=当前2
curr2=curr2.next
上一个=上一个

感谢antdul提供的解决方案,我一直在寻找一种更简单的方法来编写它(如果存在)。我的意思是没有“if not curr2或curr1.val抱歉,我仍然会在您的解决方案中遇到我上面提到的属性错误。通常我编辑帖子很好,但目前我看不到更简单的@odablocker