Deque
Deque(Double Ended Queue)就是 双端队列,特点是:
双向链表
(Doubly Linked List) 来实现 Deque,原因是:此外还可基于Array
进行实现
Node
节点public class Node {
T item;
Node next;
Node prev;
}
item
:保存实际元素。
next
:指向下一个节点。
prev
:指向上一个节点。
Sentinel
哨兵节点哨兵(sentinel)本身不存数据(item=null)。
它的 next 指向第一个元素,prev 指向最后一个元素。
当链表是空时:sentinel.next == sentinel 且 sentinel.prev == sentinel。
这样可以避免对头插、尾插写特殊判断,因为哨兵把链表首尾“连起来”了。
假设:
sentinel
是哨兵,不存实际数据。
sentinel <-> A <-> B <-> C <-> sentinel
此时 sentinel.next
是 A
,sentinel.prev
是 C
。
X
插到最前面,也就是放到 A
前面。所以插入后应该是:sentinel <-> X <-> A <-> B <-> C <-> sentinel
✅ newNode.prev = sentinel
;
意思是:
✅ newNode.next = sentinel.next
;
意思是:
✅ sentinel.next.prev = newNode
;
意思是:
✅ sentinel.next = newNode
;
意思是:
@Override
public void addFirst(T x) {
Node newNode = new Node(x, null, null);
newNode.prev = sentinel;
newNode.next = sentinel.next;
sentinel.next.prev = newNode;
sentinel.next = newNode;
}
— 2025年7月17日