Добавление элемента в двусвязный список

Я пытаюсь создать отсортированный двусвязный список, состоящий из товаров. У товара есть название и цена, сортировка по цене. Соответственно товар с самой высокой стоимостью будет впереди итд.

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
→ Ссылка