LinkedList merge_sorted无限循环

问题描述 投票:0回答:1

在对链接列表使用函数 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        
python linked-list
1个回答
0
投票

将来,请发布完整的代码,足以让人们运行来重现您的问题。在这种情况下,我们缺少类包装

.val
.nxt
,并且不知道当您获得无限循环时输入可能是什么。

无论如何,这看起来很肤浅,在开始时就偏离了轨道:在第一次比较之后,您需要推进

curr1
curr2
中的获胜者。例如,假设
curr1.val
获胜。然后你需要做
curr1 = curr1.nxt
这样你就不会再次比较。但代码没有。因此,
curr1
也赢得了第二个(相同!)比较,并且,实际上,
curr1.nxt = curr1
已完成。这就是无限循环的由来:链表变成了无限循环。

© www.soinside.com 2019 - 2024. All rights reserved.