首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么链表的最后一个元素没有出现在输出中?

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

Stack Overflow用户
提问于 2021-04-08 17:06:13
回答 1查看 38关注 0票数 0

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

举个例子

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

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

代码语言:javascript
复制
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 < curr2.val:“生成了一个AttributeError:”NoneType对象没有'val‘属性。

有什么想法吗? 1.如何修改代码以产生正确的输出;2.为什么我在更改while行时会出现这个错误?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-08 17:15:51

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67000748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档