【问题标题】:Java Queue Implementation with Pointers带指针的 Java 队列实现
【发布时间】:2016-01-29 09:27:19
【问题描述】:

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

【问题讨论】:

  • Java 不支持指针。每当您在 Java 中创建对象时,实际上是在创建指向该对象的指针,然后可以将该指针设置为不同的对象或 null
  • @StefanBeike 在java中有参考stackoverflow.com/questions/1750106/…
  • 所以您试图询问如何从 head 获取下一个节点,即使该节点不存在。??
  • 我在问为什么不设置就可以得到nextnode。 nextnode 在哪里设置?该代码无需我调用 head.setNextNode()... 即可工作
  • "Java 不支持指针" -- Java 中充满了指针。 Object 上的每个句柄都是一个指针。它不支持所有与 C++ 相同的指针操作,但它确实支持指针。

标签: java algorithm pointers data-structures queue


【解决方案1】:

我想通了:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2013-11-02
    相关资源
    最近更新 更多