将两个已排序的链接列表合并到python中的一个链接列表中
发布时间:2020-12-20 12:30:59 所属栏目:Python 来源:网络整理
导读:这是我的代码: def merge_lists(head1,head2): if head1 is None and head2 is None: return None if head1 is None: return head2 if head2 is None: return head1 if head1.value head2.value: temp = head1 else: temp = head2 while head1 != None and
|
这是我的代码:
def merge_lists(head1,head2):
if head1 is None and head2 is None:
return None
if head1 is None:
return head2
if head2 is None:
return head1
if head1.value < head2.value:
temp = head1
else:
temp = head2
while head1 != None and head2 != None:
if head1.value < head2.value:
temp.next = head1
head1 = head1.next
else:
temp.next = head2
head2 = head2.next
if head1 is None:
temp.next = head2
else:
temp.next = head1
return temp
pass
这里的问题被困在无限循环中.任何人都告诉我问题是什么 例子是: assert [] == merge_lists([],[]) assert [1,2,3] == merge_lists([1,3],3] == merge_lists([],[1,3]) assert [1,1,3,4,5] == merge_lists([1,5]) 解决方法
当前代码的问题在于,在导航到当前节点的下一个节点之前,它会导致临时节点的副作用.当前临时节点是当前节点时,这是有问题的.
也就是说,想象一下这种情况: temp = N temp.next = N # which means N.next = N N = N.next # but from above N = (N.next = N) -> N = N 有一个更正版本,还有一些其他更新: def merge_lists(head1,head2):
if head1 is None:
return head2
if head2 is None:
return head1
# create dummy node to avoid additional checks in loop
s = t = node()
while not (head1 is None or head2 is None):
if head1.value < head2.value:
# remember current low-node
c = head1
# follow ->next
head1 = head1.next
else:
# remember current low-node
c = head2
# follow ->next
head2 = head2.next
# only mutate the node AFTER we have followed ->next
t.next = c
# and make sure we also advance the temp
t = t.next
t.next = head1 or head2
# return tail of dummy node
return s.next
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |








