我最近尝试用Java实现带有链接列表的队列。 enqueue,将项目添加到队列的功能如下。

void enqueue(int key)
    {

        // Create a new LL node
        Node temp = new Node();

        // If queue is empty, then new node is front and rear both
        if (this.rear == null) {
            temp.setData(key);
            this.front = this.rear = temp;
            return;
        }
        temp.setData(key);
        // Add the new node at the end of queue and change rear
        this.rear.setLink(temp);
        this.rear = temp;
    }

class Node{

    private int data;
    private Node link;

    public int getData(){
        return this.data;
    }

    public void setData(int data){
        this.data = data;
    }

    public Node getLink(){
        return this.link;
    }

    public void setLink(Node link){
        this.link = link;
    }

    public Node(){
    }
}


这按预期工作,但我不明白的是此函数的最后两行。首先我们将当前后方的链接设置为新节点,然后立即为rear分配新节点。 rear中存储的先前值发生了什么?

最佳答案

Rear只是指向插入Queue的最后一个元素的引用。假设您当前的队列具有以下元素1-> 2-> 3(后方)。后面现在指向3。现在,假设您调用enqueue(4)。当前后方的link(next)指针应指向新节点。 this.rear.setLink(temp)行正是这样做的。当前队列的内容将为1-> 2-> 3(后方)->4。我们需要更新新的后方。 this.rear = temp正是这样做的。最终,队列的内容将是1-> 2-> 3-> 4(后方)

07-25 21:13