使用指针实现Java队列

时间:2016-01-29 09:27:19

标签: java algorithm pointers data-structures queue

我需要帮助理解这一点。我知道如何实现队列,但有一小部分困扰我。我在笔记本上画了一些工作方式的流程,但是如果没有我设置它,我就不知道头部有一个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);
        }
    }

下面,dequeing工作正常,我想我有一个问题理解整个引用/指针的事情

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;
    }

1 个答案:

答案 0 :(得分:0)

我明白了:

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

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

            } else {
                current.setNextNode(tail);
            }
        }