Итак, я изучаю связанные списки в Python, но не могу вставить узел между моими узлами.Позвольте мне опубликовать мой код ниже и объяснить, что я сделал и где, по-моему, проблема возникает.
class Node(object):
def __init__(self, data):
self.data = data
self.nextNode = None
'''
def __str__(self):
return str(self.data)
'''
class LinkedList(object):
def __init__(self):
self.head = None
self.tail = None
# Insert inbetween
def insert_in_between(self, data, prev_data):
print("<<< INSERT INBETWEEN >>>")
# instantiate the new node
new_node = Node(data)
print("This is new_node: ", new_node)
# assign to head
thisval = self.head
print("This is thisval: ", thisval)
print("This is prev_data: ", prev_data)
# check each value in linked list against prev_data as long as value is not empty
while thisval is not None:
print("thisval is NOT NONE")
print("in while loop, thisval = ", thisval)
print("in while loop, prev_data = ", prev_data)
# if value is equal to prev_data
if thisval == prev_data:
print("thisval == prev_data")
# make the next of new_node the prev_data's next
new_node.nextNode = prev_data.nextNode
# make the next of prev_data the new_node
prev_data.nextNode = new_node
break;
# if value is not eqaul to prev_data then assign variable to next Node
else:
thisval = thisval.nextNode
def push_from_head(self, NewVal):
new_node = Node(NewVal)
print("This is new_node: ", new_node.data)
last = self.head
print("This is last/HEAD: ", last)
if self.head is None:
print("Head is NONE")
self.head = new_node
print("This is self.head: ",self.head)
return
print("last.nextNode: ", last.nextNode)
while last.nextNode is not None:
print("this is last inside while loop: ", last.data)
print("last.nextNode is not NONE")
last = last.nextNode
print("This is the last last: ", last.data)
last.nextNode = new_node
print("This is last.nextNode: ", last.nextNode)
def print_nodes(self):
if self.head:
thisval = self.head
while thisval:
print("This is node: ", thisval.data)
thisval = thisval.nextNode
e1 = LinkedList()
e1.push_from_head(10)
e1.push_from_head(20)
e1.push_from_head(30)
e1.push_from_head(40)
e1.push_from_head(50)
e1.insert_in_between(25, 20)
e1.print_nodes()
- Хорошо, поэтому я хочу вставить узел (25) между 20 и30.
- В моем методе insert_in_between я использую два аргумента: data и prev_data.Данных 25, но они становятся узлами, потому что я передаю их в класс узлов?Но prev_data - это int (20).
- Я ожидал, что эта печать напечатает
print("thisval == prev_data")
, когда thisval == prev_data
, но я думаю, что из-за несоответствия между узлами и целыми числами, эта оценка не будет иметь значение true.
Я уверен, что это легко исправить, и я безуспешно пытаюсь найти решение.Кто-нибудь может указать мне правильное направление?
РЕДАКТИРОВАТЬ
Когда я изменяю строку, как предложено: if thisval.data == prev_data:
Я получаю ошибку: AttributeError: 'int'У объекта нет атрибута «nextNode», в котором он жалуется на эту строку: new_node.nextNode = prev_data.nextNode