我写了一些关于链表的代码,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 < curr2.val:“生成了一个AttributeError:”NoneType对象没有'val‘属性。
有什么想法吗? 1.如何修改代码以产生正确的输出;2.为什么我在更改while行时会出现这个错误?
谢谢
发布于 2021-04-08 17:15:51
问题实际上来自于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.nexthttps://stackoverflow.com/questions/67000748
复制相似问题