在对链接列表使用函数 merge_sorted 时,我不断陷入无限循环。请帮忙。谢谢:)
我检查了 merge_sort 函数,看起来没问题。它更新循环内的 curr1 和 curr2 但我不确定为什么我进入无限循环。
def merge_sorted(root1,root2):
"""Ascending Order"""
if root1 == None:
return root2
if root2 == None:
return root1
curr1 = root1
curr2 = root2
new_root = None
new_tail = None
# init r and t
if curr1.val > curr2.val:
new_root = curr2
new_tail = curr2
else: # curr1.val <= curr2.val
new_root = curr1
new_tail = curr1
# merge
while curr1 and curr2:
if curr1.val > curr2.val:
# curr2 goes first
new_tail.nxt = curr2
new_tail = new_tail.nxt
curr2 = curr2.nxt
else: # curr1.val <= curr2.val
# curr1 goes first
new_tail.nxt = curr1
new_tail = new_tail.nxt
curr1 = curr1.nxt
if curr1:
new_tail.nxt = curr1
if curr2:
new_tail.nxt = curr2
return new_root
将来,请发布完整的代码,足以让人们运行来重现您的问题。在这种情况下,我们缺少类包装
.val
和 .nxt
,并且不知道当您获得无限循环时输入可能是什么。
无论如何,这看起来很肤浅,在开始时就偏离了轨道:在第一次比较之后,您需要推进
curr1
和 curr2
中的获胜者。例如,假设 curr1.val
获胜。然后你需要做 curr1 = curr1.nxt
这样你就不会再次比较。但代码没有。因此,curr1
也赢得了第二个(相同!)比较,并且,实际上,curr1.nxt = curr1
已完成。这就是无限循环的由来:链表变成了无限循环。