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