# 1 楼答案 {a1}使用了两个技巧: 队列包含一个始终存在的盲元素,即使在空队列中也是如此。盲元素始终是队列中的第一个元素,但在类外部不可见 队列实际上是一个环。我们知道我们到达最后一个元素时currentElement.next == blind 下图显示了长度为0(左)的队列和长度为1(右)的QUE 使用这些技巧的好处是: 没有空指针 没有用于添加/排队元素的if-else 对于remove/deque,我们仍然需要检查队列是否为空 添加 newElement.next = head.next; newElement.prev = head; newElement.prev.next = newElement; newElement.next.prev = newElement; 删除 if (head.next == head) { // ERROR, queue is empty } else { removedElement.next.prev = removedElement.prev; removedElement.prev.next = removedElement.next; } 请注意,在不使用这些技巧的情况下,只需使用一个额外的if-else语句就完全可以实现队列。 下图显示了一个简单实现的队列,长度为0(左)和1(右) 添加 if (head == null) { // queue is empty head = newElement; } else { // add to head } 删除 if (head == null) { // ERROR, queue is empty } else { // remove from tail }
# 1 楼答案
{a1}使用了两个技巧:
队列包含一个始终存在的盲元素,即使在空队列中也是如此。盲元素始终是队列中的第一个元素,但在类外部不可见
队列实际上是一个环。我们知道我们到达最后一个元素时
currentElement.next == blind
下图显示了长度为0(左)的队列和长度为1(右)的QUE
使用这些技巧的好处是:
对于remove/deque,我们仍然需要检查队列是否为空
添加
删除
请注意,在不使用这些技巧的情况下,只需使用一个额外的if-else语句就完全可以实现队列。 下图显示了一个简单实现的队列,长度为0(左)和1(右)
添加
删除