此链接队列代码是如何工作的?-python

此链接队列代码是如何工作的?-python,python,linked-list,Python,Linked List,我正试图理解这段代码是如何工作的,但在如何思考这段代码方面,我遇到了一些困惑,尤其是在如何将所有内容链接在一起的问题上 我是这样想的: 当队列(Q)初始化时,我们有Q=[self.\u head=None,self.\u tail=None,size=0](不是python代码——只是一种组织数据属性的可视化方式),然后当第一个元素排队时,我们创建一个节点N1=(e1,None),并将其分配给self.\u tail和Q=[(e1,None),(e1,None),1] 当第二个元素进入队列时,我

我正试图理解这段代码是如何工作的,但在如何思考这段代码方面,我遇到了一些困惑,尤其是在如何将所有内容链接在一起的问题上

我是这样想的:

当队列(Q)初始化时,我们有Q=[self.\u head=None,self.\u tail=None,size=0](不是python代码——只是一种组织数据属性的可视化方式),然后当第一个元素排队时,我们创建一个节点N1=(e1,None),并将其分配给self.\u tail和Q=[(e1,None),(e1,None),1]

当第二个元素进入队列时,我们创建第二个节点N2=(e2,None),我们有self.\u tail.\u next=newest,它将Q更新为Q=[(e1,None),(e1,N2),1]。然后代码有self.\u tail=newest,它将Q更新为Q=[(e1,None),(e2,None),2]

看起来这里没有任何链接。我对这段代码的理解到底遗漏了什么

class LinkedQueue:

    class _Node:

        __slots__='__element', '__next'

        def __init__(self, element, next):
            self._element = element
            self._next = next

    def __init__(self):
        self._head = None
        self._tail = None
        self._size = 0

    def dequeue(self):
        if self.is_empty():
            raise Exception('Queue is empty')
        answer = self._head._element
        self._head = self._head._next
        self._size -= 1
        if self.is_empty():
            self._tail = None
        return answer

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

队列至少有两个点:一个指向头部,一个指向尾部。这允许您按照添加节点的顺序迭代节点,并将新节点添加到队列的末尾。我们可以将空队列可视化为:

    Head -> <- Tail
2
添加到队列:

    Head -> 1 <- Tail
    Head -> 1 
            2 <- Tail
    Head -> 1 
            2
            3 <- Tail
将一个元素移出队列意味着将
Head
移动到下一个元素并返回旧值

            1 <- first_element

    Head -> 2
            3 <- Tail
12
3.