实现方法 3:双端队列实现栈
如果觉得以上方法比较难的话,最后我们还有一个更简单的实现方法,我们可以使用 Java 中的双端队列 ArrayDeque
来实现将元素可以插入队头或队尾,同样移除也是,那么这样我们就可以从队尾入再从队尾出,从而就实现了栈的功能了。
双端队列结构如下:
我们来演示一下用双端队列实现栈的具体步骤。
步骤一
元素 1 入队:
步骤二
元素 2 入队(队尾):
步骤三
再从队尾出队:
最终效果
以上思路的实现代码如下:
import java.util.ArrayDeque; class MyStack { ArrayDeque<Integer> deque; public MyStack() { deque = new ArrayDeque<>(); } /** * 入栈 */ public void push(int x) { deque.offer(x); } /** * 出栈并返回此元素 */ public int pop() { return deque.pollLast(); } /** * 查询栈顶元素 */ public int top() { return empty() ? -1 : deque.peekLast(); } /** * 判断是否为空 */ public boolean empty() { return deque.isEmpty(); } }
我们把以上代码在 LeetCode 中提交,执行结果如下:
总结
本文我们用 3 种方法实现了将队列转换为栈,其中最简单的方法是用 Java 中自带的双端队列 ArrayDeque
从队尾入并从队尾出就实现了栈 ,其他两个方法使用的是普通队列,通过入队之后再移动元素到入队元素之后的方法,从而实现了栈的功能。