【问题标题】:Attribute Error: 'NoneType' object has no attribute '_next'属性错误:\'NoneType\' 对象没有属性 \'_next\'
【发布时间】:2023-02-17 13:35:53
【问题描述】:

我知道将实例方法或任何预设函数插入 None 类型时会发生这些错误,但由于我正在实施单链表我需要将 None 类型分配给最后一个节点。我无法在此处更改输入值,因此如何解决此问题。

以下是我的代码——

class singlyLinked:
    class _node:
        def __init__(self, data, next):
            self._data = data
            self._next = next
            
    def __init__(self):
        self._head=None
        self._tail=None
        self._size=0
    
    def __len__(self):
        return self._size
        
    def isEmpty(self):
        return self._size==0
    
    def first(self):
        if self.isEmpty():
            raise Error('Queue is Empty')
        return self._head._data #front aligned with the head of list
    
    def dequeue(self):
        if self.isEmpty():
            raise Error('Queue is Empty')
        answer=self._head._data
        self._head=self._head._next
        self._size -= 1
        if self.isEmpty():
            self._tail=None
        return answer
    
    def enqueue(self, e):
        newest=self._node(e, None)
        if self.isEmpty():
            self._head=newest
        else:
            self._tail._next=newest
        self.tail=newest
        self._size+=1

我在 Jupyter Notebook 中收到以下错误

AttributeError                            Traceback (most recent call last)
Cell In [20], line 3
      1 a=singlyLinked()
      2 a.enqueue(5)
----> 3 a.enqueue(5)
      4 a.enqueue(5)
      5 a.enqueue(5)

Cell In [19], line 41, in singlyLinked.enqueue(self, e)
     39     self._head=newest
     40 else:
---> 41     self._tail._next=newest
     42 self.tail=newest
     43 self._size+=1

AttributeError: 'NoneType' object has no attribute '_next'

【问题讨论】:

    标签: python data-structures linked-list singly-linked-list nonetype


    【解决方案1】:

    您可以将排队功能更改为:

        def enqueue(self, e):
            newest=self._node(e, None)
            if self.isEmpty():
                self._head=newest
                self._tail=newest
            else:
                self._tail._next=newest
                self._tail=newest
            self._size+=1
    
    

    【讨论】:

    • 你打败了我哈哈。当列表为空时,需要设置头部和尾部。
    【解决方案2】:

    你有一个错字

            newest=self._node(e, None)
            if self.isEmpty():
                self._head=newest
            else:
                self._tail._next=newest
            self.tail=newest
            self._size+=1
    

    你需要:

    self._tail = newest(带下划线)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-14
      • 2021-02-17
      • 2018-05-02
      • 2019-03-17
      • 1970-01-01
      • 2022-11-29
      • 2021-09-17
      • 2020-10-22
      相关资源
      最近更新 更多