用链表实现队列/栈
核心要点
本文是 labuladong 数据结构基础系列教程,讲解如何以链表作为底层结构实现栈和队列,所有操作均达到 O(1) 时间复杂度。
用链表实现栈
- 使用双链表(
java.util.LinkedList)作为底层存储 - 可将双链表的头部或尾部作为栈顶:两端增删操作均为 O(1)
- 示例代码
MyLinkedStack:push(E e):向栈顶添加元素 →list.addLast(e)(尾部作为栈顶)pop():弹出栈顶元素 →list.removeLast()peek():查看栈顶 →list.getLast()
- 若改为头部作为栈顶,只需将
addLast→addFirst、removeLast→removeFirst、getLast→getFirst
用链表实现队列
- 同样使用双链表作为底层存储
- 将双链表头部作为队头、尾部作为队尾:头部删除 O(1),尾部添加 O(1)
- 示例代码
MyLinkedQueue:push(E e):入队 →list.addLast(e)(队尾添加)pop():出队 →list.removeFirst()(队头删除)peek():查看队头 →list.getFirst()
- 也可反转方向,将头部作为队尾、尾部作为队头,只需调整对应 API 调用
相关概念
相关实体
- labuladong:算法学习平台作者