首页 > 解决方案 > AttributeError: 'NoneType' 对象在插入双向链表时没有属性 'prev'

问题描述

我正在尝试学习有关数据结构和算法的udemy课程,因为我对此完全陌生,因此将不胜感激任何帮助,如果答案保持简单,那将非常有帮助。谢谢。我试着联系导师,但他没有回应。我自己认为这段代码没有问题,所以任何建议都会对我有很大帮助。

class Node:
    def __init__(self,value=None):
        self.value= value
        self.next= None
        self.prev = None



class DoublyLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None


    def __iter__(self):
        node = self.head
        while node:
            yield node
            node = node.next
            

    def createDLL(self,value):
        newNode = Node(value)
        newNode.next = None
        newNode.prev = None
        self.head = newNode
        self.tail = newNode

    def insert(self,value,location):
        if self.head is None:
            print("Linked list does not exist")
        else:
            newNode = Node(value)
            if location == 0:
                newNode.prev = None
                newNode.next = self.head
                self.head.prev = newNode
                self.head = newNode
            elif location == 1:
                newNode.next = None
                newNode.next = self.head
                self.head.prev = newNode
                self.head = newNode
            else:
                tempNode = self.head
                index = 0
                while index < location - 1:
                    tempNode = tempNode.next
                    index += 1

                newNode.next = tempNode.next
                newNode.prev = tempNode
                newNode.next.prev = newNode
                tempNode.next = newNode
                





doublyLL = DoublyLinkedList()
doublyLL.createDLL(1)
doublyLL.insert(2,1)
doublyLL.insert(3,2)

我正在尝试插入一个新节点,但它不断返回此错误:

Traceback (most recent call last):
  File "C:\Users\User\Documents\doublylinkedlist.py", line 66, in <module>
    doublyLL.insert(3,2)
  File "C:\Users\User\Documents\doublylinkedlist.py", line 55, in insert
    newNode.next.prev = newNode
AttributeError: 'NoneType' object has no attribute 'prev'

我正在尝试学习有关数据结构和算法的udemy课程,因为我对此完全陌生,因此将不胜感激任何帮助,如果答案保持简单,那将非常有帮助。谢谢

标签: pythonalgorithmdata-structureslinked-listdoubly-linked-list

解决方案


你的else条款需要更正。

此外,您确实不需要该elif子句。该else条款也应该能够涵盖这种情况。

因此,删除该elif子句,并更正您的else子句,如下所示:

            else:
                tempNode = self.head
                index = 0
                while index < location - 1:
                    tempNode = tempNode.next
                    index += 1

                newNode.next = tempNode.next
                newNode.prev = tempNode
                if newNode.next:
                    newNode.next.prev = newNode
                tempNode.next = newNode


推荐阅读