当前代码的问题是,它会导致临时节点的副作用是下一个 之前 将定位从当前节点的下一个节点。当当前临时节点 是 当前节点时,这是有问题的。
也就是说,想象一下这种情况:
temp = Ntemp.next = N # which means N.next = NN = 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



