Добавление элемента в двусвязный список
Я пытаюсь создать отсортированный двусвязный список, состоящий из товаров. У товара есть название и цена, сортировка по цене. Соответственно товар с самой высокой стоимостью будет впереди итд.
class Node:
def __init__(self, nextNode, prevNode, data):
self.data = data
self.nextNode = nextNode
self.prevNode = prevNode
class Listnew:
def __init__(self):
self.head = None
def push(self, item):
if self.head is None:
newNode = Node(None, None, item)
self.head = newNode
return
else:
newNode = Node(None, None, item)
node = self.head
while node is not None:
if node.data.price > newNode.data.price:
break
node = node.nextNode
newNode.prevNode = node
newNode.nextNode = node.prevNode
if node.prevNode is not None:
node.nextNode.prevNode = newNode
node.prevNode = newNode
def printList(self):
node = self.head
while node is not None:
print(node.data.price)
node = node.nextNode
class Item:
def __init__(self, name, price):
self.name = name
self.price = price
Но при попытке добавить более одного элемента в список получаю следующую ошибку:
node.nextNode.prevNode = newNode
AttributeError: 'NoneType' object has no attribute 'prevNode'
Ответы (1 шт):
Автор решения: sigalgleb
→ Ссылка
class Node:
def __init__(self, nextNode, prevNode, data):
self.data = data
self.nextNode = nextNode
self.prevNode = prevNode
class Listnew:
def __init__(self):
self.head = None
# Наполним двухсвязный список элементами
def push(self, item):
newNode = Node(None, None, item)
if self.head is not None:
newNode.nextNode = self.head
self.head.prevNode = newNode
self.head = newNode
# Отсортируем элементы в двухсвязном списке по убыванию цены
def sort_by_price(self):
node = self.head
while node is not None:
nextNode = node.nextNode
while nextNode is not None:
if node.data.price < nextNode.data.price:
node.data, nextNode.data = nextNode.data, node.data
nextNode = nextNode.nextNode
node = node.nextNode
def printList(self):
node = self.head
while node is not None:
print(node.data.price)
node = node.nextNode
class Item:
def __init__(self, name, price):
self.name = name
self.price = price
# Создадим список
elements = Listnew()
# Добавим элементы
item_one = Item("A", 10)
item_two = Item("B", 20)
item_three = Item("C", 5)
elements.push(item_one)
elements.push(item_two)
elements.push(item_three)
# Отсортируем по цене по убыванию
elements.sort_by_price()
# Выведем результат
elements.printList()
# 20
# 10
# 5