为什么队列中的后部元素指向空

why rear element in a queue points to null

队列的链表实现中,为什么队列中最后插入的元素指向null?在堆栈的链表实现中,为什么第一个元素(首先插入)指向空值?

我问这个问题的原因是我在 java 中使用链表实现堆栈和队列,如果存在 null 则实现更改让我们说在队列的前面或者 null 存在于堆栈顶部的下一个。

两种结构都是链表。每个节点都有一个指向下一个节点的 next 指针。当没有下一个节点时,我们需要决定将哪个值放在那里。在那里存储空指针值很方便,因为该值永远不会与真正的指针混淆。

这个空指针对于将节点标识为最后一个节点通常很重要。 例如,堆栈实现中的 pop 方法需要处理 last(底部)元素被移除时发生的情况。 pop 将按照以下方式实施:

if (top == nullptr) return nullptr; // Stack is empty
Node * node = top;
top = top->next;
free(node);

因此,由于空堆栈由 top === nullptr 标识,因此将堆栈底部元素的 next 指针设置为 nullptr 很重要。只有这样才能正确设置去掉底部元素后的空条件。

如果数据结构维护对最后一个节点的引用(如 *rear 在队列的情况下),那么理论上我们可以保留最后一个节点的 next 指针的值未定义(即任何值)。然后我们可以通过将节点的地址与 rear 指针进行比较来将节点识别为最后一个节点,而无需查看该(未定义,因此不安全)next 指针。但更好的做法是在那里存储一个显式的空指针,这会导致(更)优雅的代码,并在代码有错误跟随最后一个节点的 next 的错误时导致更好的错误报告指针。