代码与动画 DEQUE
双端队列.
使用双向链接,在队首和队尾分别插入或移除节点。
两端操作 O(1)双向链式实现演示容量 6
原理与执行逻辑
双端队列允许在队首与队尾分别插入、移除。当前链式实现让每个节点保存 next 与 prev,front 和 rear 分别指向两端。
执行步骤
- 队首插入时,将新节点连到原 front 前面,并更新双方链接。
- 队尾插入时,将新节点连到原 rear 后面,并更新双方链接。
- 从任一端移除时,将端点移到相邻节点,并清理向外的链接。
- 空队列首次插入时两端指向同一节点;删除最后一个节点后两端都为 null。
关键理解
相邻节点的 next 与 prev 必须相互对应。只操作端点可保持 O(1) 成本,处理单节点情况时需要同时更新两端。
简短示例
队列 [12, 25] 在队首加入 8 得到 [8, 12, 25],再从队尾取出 25,剩余 [8, 12]。
代码与执行动画
STEP 0 / 0const deque = { front: firstNode, rear: lastNode, size: 3 };size = 3front = 12rear = 38
当前数据正在操作已访问 / 命中标记 / 指针
0
当前结构
选择操作,观察对应代码和状态变化。
操作当前结构
操作结果会用于下一次操作;重置结构恢复初始数据。
双端队列的操作规则
front 和 rear 分别指向首尾。两条箭头分别表示 next 和 prev;移除最后一个节点后,首尾均为 null。
对应题目与扩展练习
观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。
练习双端插入与删除;题目使用固定容量,可将链式实现调整为环形数组。