【问题标题】:why is the last element of the linked list not appearing in the output?为什么链表的最后一个元素没有出现在输出中?
【发布时间】:2021-07-04 03:10:23
【问题描述】:

我写了一些与链表、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

上面的代码返回 [1,1,2,3,4] 作为输出,而不是正确答案 [1,1,2,3,4,4],我知道为什么;这是因为当我们到达 L1 的最后一个元素时,while 循环停止并且不考虑 L2 的最后一个元素。

我已尝试更改代码,尤其是将“while curr1 和 curr2”行改为“while L1 和 L2”:....

但这会为以下行“if curr1.val

任何想法 1. 如何修改代码以产生正确的输出和 2. 为什么我在更改 while 行时收到该错误?

谢谢

【问题讨论】:

    标签: python linked-list


    【解决方案1】:

    问题实际上来自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
    

    【讨论】:

    • 感谢 antdul 的解决方案,如果存在的话,我一直在寻找一种更简单的方式来编写它。我的意思是没有“如果不是 curr2 或 curr1.val
    • 对不起,我仍然得到我上面提到的属性错误与你的解决方案。
    • 通常我编辑帖子很好,但目前我没有看到更简单的@odablocker
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2019-11-29
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多