我最近尝试用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(后方)