【问题标题】:AttributeError in the implementation of queue by using Single Linked List in the python在python中使用单链表实现队列中的AttributeError
【发布时间】:2021-10-19 19:30:27
【问题描述】:

我想通过使用单链表来实现一个队列。当我运行以下代码时,我收到 AttributeError。我不知道我应该怎么做才能解决这个问题。 我假设链表的第一个作为队列的前面,而链表的第一个作为队列的后面。 通过使用 while 循环,我想连接整个单链表。

class Node:
    def __init__(self, value):
        self.info = value
        self.link = None


class Queue:
    def __init__(self):
        self.front = None


    def enqueue(self, data):
        temp = Node(data)
        p = self.front
        if self.front is None:
            self.front = temp

        while p.link is not None:
            p = p.link
        p.link = temp
        temp.link = None

    def dequeue(self):
        self.front = self.front.link

    def size(self):
        p = self.start
        n = 0
        while p is not None:
            p = p.link
            n += 1
        return n

    def display(self):
        p = self.start
        while p is not None:
            p = p.link
        print(p.info, '', end='')

qu = Queue()

for i in range(4):
    add = int(input("please enter the elements "))
    qu.enqueue(add)
    qu.display()

for i in range(2):
    qu.dequeue()
    qu.display()
Traceback (most recent call last):
  File "C:/Users/HP/Music/Queue_SLList.py", line 43, in <module>
    qu.enqueue(add)
  File "C:/Users/HP/Music/Queue_SLList.py", line 18, in enqueue
    while p.link is not None:
AttributeError: 'NoneType' object has no attribute 'link'

【问题讨论】:

  • p = self.front 需要在设置self.front的if之后
  • 这里是@Barmar Traceback(最近一次调用最后一次):文件“C:/Users/HP/Music/Queue_SLList.py”,第 43 行,在 qu.enqueue(add)文件“C:/Users/HP/Music/Queue_SLList.py”,第 18 行,在队列中,而 p.link 不是 None: AttributeError: 'NoneType' object has no attribute 'link'
  • 把它放在问题中,这样它就可以被格式化为可读的。

标签: python queue singly-linked-list enqueue


【解决方案1】:

当队列为空时,您将p 设置为None,而您执行p = self.front。然后,当您尝试执行 while p.link is not None 时会出现错误,因为 p 不是节点。

如果您将第一个 noe 加入队列,则应该从该方法返回。

    def enqueue(self, data):
        temp = Node(data)
        if self.front is None:
            self.front = temp
            return

        p = self.front
        while p.link is not None:
            p = p.link
        p.link = temp
        temp.link = None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多