【问题标题】:Recursive method in class producing endlessly repeating value类中的递归方法产生无限重复的值
【发布时间】:2021-06-12 05:01:08
【问题描述】:

抱歉这里有初学者问题。

我正在尝试使用递归为链表类实现 insert 方法,如下面的代码所示。
但是,当我尝试它时,我会返回一个无限重复我想要插入的值的列表。

例如
第一个节点是'a',
第二个节点是'b',
第三个节点是'c'。

如果我使用代码插入“d”作为新的第 3 个节点,我会得到“abdddddddd....”无限。

非常感谢您就导致此行为的原因提供一些建议。

class linked_list():


    def __init__(self, node):
        self.node = node


    def insert_at_index (self, index, value, node=None, current_index=0):
        def insert_recur(index, new_node, node, current_index):
            if current_index == index:
                node.next_node = new_node
                new_node.next_node = node.next_node
                return None
            else:
                return insert_recur(index, new_node, node.next_node, current_index+1)
        
        new_node = Node(value)
        if index == 0:
            new_node.next_node = self.node
            self.node = new_node
            return
        else:
            node = self.node 
            insert_recur(index, new_node, node, current_index)

【问题讨论】:

    标签: python recursion data-structures linked-list


    【解决方案1】:

    问题出在这里:

    if current_index == index:
        node.next_node = new_node
        new_node.next_node = node.next_node
        return None
    

    分配node.next_node = new_node后,node.next_node的旧值已经丢失。后面的赋值 new_node.next_node = node.next_node 等价于 new_node.next_node = new_node。所以new_node 成为它自己的继任者。

    尝试颠倒分配的顺序:

    if current_index == index:
        new_node.next_node = node.next_node
        node.next_node = new_node
        return None
    

    【讨论】:

    • 不敢相信我错过了!非常感谢!标记为答案:D
    猜你喜欢
    • 2021-09-26
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多