使用指针实现 Java 队列



我需要帮助来理解这一点。我知道如何实现队列,但有一个小部分困扰着我。我在笔记本上绘制了事物如何工作的流程,但是如果没有我的设置,我不明白头部如何具有nextNode。头部如何最终指向下一个节点?

public void enqueue(T data){
        count++;
        Node<T> current = tail;
        tail = new Node<>(data);
        if(isEmpty()) {
            ///////////////////////////////////////////////////////////////////////////////
            // when this runs, doesn't head.getNextNode point to null?
            // if the list is empty, then tail is null.
            // On the deque method, I can sout head.getNextNode() and I get data back, how?
            ///////////////////////////////////////////////////////////////////////////////
            head = tail;
        } else {
            current.setNextNode(tail);
        }
    }

下面,去格工作正常,我想我在理解整个参考/指针方面遇到了问题

public T dequeue() {
        if(isEmpty()) {
            return null;
        }
        count--;
        T dataToRemove = head.getData();
        /////////////////////-+{[UPDATE]}+-////////////////////////////////
        // WHERE DOES HEAD GET THE NEXT NODE FROM? THIS WORKS, BUT WHERE IS
        // THE NEXT NODE COMING FROM IS WHAT I'M ASKING?
        ///////////////////////////////////////////////////////////////////
        head = head.getNextNode();
        return dataToRemove;
    }

我想通了:

当列表为空时,头部指向尾部 然后,当再次调用 enqueue 方法时, 电流将指向尾部,但头部仍将指向尾部参考 所以现在 head 指向与当前相同的参考 在 else 语句中,当前将下一个节点设置为相同的引用 头指向。这就是头部获得其 nextNode 集的方式。 当该方法再次运行时,当前将 再次指向另一个引用,但 head 仍将指向其原始引用。砰砰��

 public void enqueue(T data){
            count++;
            Node<T> current = tail; 
            tail = new Node<>(data);
            if(isEmpty()) {
                head = tail;
            } else {
                current.setNextNode(tail);
            }
        }

最新更新