队列实现栈的3种方法,全都击败了100%的用户! (2)

再将 queue1 和 queue2 进行互换:

image.png

步骤六

执行出队操作:

image.png


image.png

最终效果

image.png


从最终的效果图我们可以看出,通过两个队列已经实现了后进先出的特性,也就是完成了从队列到栈的转换,实现代码如下:

import java.util.Queue; class MyStack { Queue<Integer> queue1; Queue<Integer> queue2; public MyStack() { queue1 = new LinkedBlockingQueue(); queue2 = new LinkedBlockingQueue(); } /** * 入栈 */ public void push(int x) { // 1.入列临时队列二 queue2.offer(x); // 2.将队列一的所有元素移动到队列二 while (!queue1.isEmpty()) { queue2.offer(queue1.poll()); } // 3.队列一和队列二互换 Queue<Integer> temp = queue1; queue1 = queue2; queue2 = temp; } /** * 出栈并返回此元素 */ public int pop() { return queue1.poll(); } /** * 查询栈顶元素 */ public int top() { return queue1.peek(); } /** * 判断是否为空 */ public boolean empty() { return queue1.isEmpty(); } }

我们在 LeetCode 中提交以上测试代码,执行结果如下:

image.png

此方法很稳,竟然击败了 100% 的用户。

实现方法 2:一个队列实现栈

那我们可以不可以用一个队列来实现栈呢?答案是肯定的。

我们只需要执行以下两个步骤就可以实现将队列转换为栈了,具体实现步骤如下:

将元素入列到队尾;

再将除队尾之外的所有元素移除并重写入列。

这样操作之后,最后进入的队尾元素反而变成了队头元素,也就实现了后进先出的功能了,如下图所示。

步骤一

元素 1 入列:

image.png

步骤二

元素 2 入列:

image.png

步骤三

将最后一个元素之前的所有元素,也就是元素 1,出列重新入列:

image.png


image.png

步骤四

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdfyx.html