我在 python 上插入单链表时遇到问题

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

因此,我正在使用类在 python 中编写链表,并在成功定义并运行我为该类设置的所有方法之后,我决定创建一个“插入”方法,在其中提供要插入的数据以及您想要插入的位置的索引。

编写完成后,我在另一个文件中对其进行了测试:我调用了构造函数,使用“push”方法为列表提供了一些数据,并尝试使用“insert”方法插入另一个数据。

我遇到的是一个无限循环 - 数据本身已插入,但在尝试使用 for 打印列表内的所有内容后,它最终陷入循环,无休止地打印相同的数据。

我检查了几次代码并尝试修复它,但问题仍然存在。

此外,如果我尝试将数据放在列表的头部,它不会被插入。

有人可以向我解释一下是什么导致代码进入这个循环以及如何修复它吗?

这是“insert”方法和辅助“Linked List”类的“Node”类的代码:

class Node:
    '''To assist the linked list class'''
    
    def __init__(self, content):
        self.node = content
        self.next = None


def insert(self, content, index: int = 0) -> bool:
        '''Insert data in a specific index'''
        if index == 0:                                               
            locate = Node(content)
            locate.next = self.head
            return True
        else:
            locate = self.head
            for i in range(1, index):
                locate = locate.next
                if locate is None:
                    raise IndexError("Index out of range!")
            temp = locate
            aux = Node(content)
            locate.next = aux
            aux.next = temp
            return True
python loops data-structures insert singly-linked-list
1个回答
0
投票

第一个错误是“if index == 0:...”

在开头插入时,必须将head设为插入的新节点,所以在“locale.next = self.head”后面必须添加代码:

self.head = locate

第二个错误: 在“for”之后,将“temp”指向与“locate”相同的位置(temp =locate),然后执行以下操作

aux = Node(content)
locate.next = aux
aux.next = temp

假设locate和temp指向节点B,这是同样的事情:

aux = Node(content)
B.next = aux
aux.next = B

所以你的列表看起来像这样:

B -> 辅助 -> B

这在列表中形成一个圆圈,因此进入无限循环。

要解决此问题,您必须更改它:

temp = locate.next
© www.soinside.com 2019 - 2024. All rights reserved.