#python #methods #linked-list
#python #методы #связанный список
Вопрос:
Я пытался создать LinkedList, и, казалось, все работало нормально, пока я не добавил класс, в который я могу вставить узел с определенным индексом.
Когда я пытаюсь запустить эту строку кода:
print(my_list.node(0))
после запуска:
print(my_list.node(1))
my_list.insert(1, 3)
Я получаю следующую ошибку: AttributeError: 'int' object has no attribute 'next'
что происходит в этом блоке кода во второй строке
def node(self, index):
if index >= self.length() or index < 0:
print("ERROR: 'Get' Index out of range!")
return None
cur_idx = 0
cur_node = self.head
while True:
cur_node = cur_node.next
if cur_idx == index:
return cur_node.data
cur_idx = 1
и, похоже, происходит из этого блока кода в четвертой строке
def length(self):
current = self.head
total = 0
while current.next is not None:
total = 1
current = current.next
return total
Эта ошибка сбивает меня с толку, поскольку она не возникает до тех пор, пока я не вставлю значение узла и не попытаюсь отобразить обновленный узел, но попытка отобразить любой узел имеет тот же эффект. Попытка отобразить список, в котором он работал, перед вставкой значения узла также выдает аналогичную ошибку: AttributeError: 'int' object has no attribute 'data'
Эта ошибка указывает на шестую строку этого блока кода:
def print(self):
elements = []
current_node = self.head
while current_node.next is not None:
current_node = current_node.next
elements.append(current_node.data)
print(elements)
Я, честно говоря, не очень уверен, каким будет решение этой проблемы. Я бы предположил, что это как-то связано с методом вставки, который у меня был для вставки узла, но в моей IDE там нет ошибок. Подсказки типа и указание типа данных, похоже, также не решают проблему. После запуска отладчика он выдает эту ошибку:
list_length.current_node = {NameError}name 'list_length' is not defined
Я прикрепил полный код к следующей ссылке pastebin: https://pastebin.com/2NHiPJ6q
Единственные решения подобных проблем, которые я нашел в Интернете, похоже, были решены путем определения класса, но я почти уверен, что проблема здесь не в этом. Я надеюсь, что кто-нибудь сможет мне здесь помочь!
Комментарии:
1. Вы имели в виду:
my_list.insert(1, Node(3))
?2. @quamrana Боже мой, я не могу сказать вам, как долго я смотрел на это, и я этого не понимал. Большое вам спасибо! Это немедленно устранило мою проблему.
3. Я надеюсь, что этот опыт поможет вам изучить методы отладки. Из вашего обратного отслеживания ошибок (спасибо, что включили его, удивительно, как много плакатов здесь просто говорят «Я получил ошибку») было очевидно, что нужно искать где-то, где an
int
был вставлен в структуру, где ожидался aNode
сdata
атрибутом.