9用两个队列实现一个栈

Posted wangAQS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9用两个队列实现一个栈相关的知识,希望对你有一定的参考价值。

现在有一个A队列和一个B队列。

(1)入栈操作,判断A队列是否有元素,若A队列有元素,则元素直接入A队列;若没有,则将元素入B队列;

(2)出栈操作,若A和B都没有元素,则出栈失败;

  判断A是否有元素,若A有元素,则获取A元素的个数N,将前N-1个元素出队并进入B队列,最后一个元素即为出栈元素;      

  如果A中没有元素,则对B执行上述操作。

第二种解法:

A队列永远作为空队列,B队列存放元素

(1)入栈操作:将元素进入A队列,然后将B中的元素循环出队并进入A队列,将A和B队列引用交换,保证A依然为空队列;

(2)出队操作:从B中弹出元素即可。

class MyStack {
    private Queue<Integer> a;//输入队列
    private Queue<Integer> b;//输出队列
    
    public MyStack() {
        a = new LinkedList<>();
        b = new LinkedList<>();
    }
    
    public void push(int x) {
        a.offer(x);
        // 将b队列中元素全部转给a队列
        while(!b.isEmpty())
            a.offer(b.poll());
        // 交换a和b,使得a队列没有 在push()的时候始终为空队列
        Queue temp = a;
        a = b;
        b = temp;
    }
    
    public int pop() {
        return b.poll();
    }
   
    public int top() {
        return b.peek();
    }
    
    public boolean empty() {
        return b.isEmpty();
    }
}

 

以上是关于9用两个队列实现一个栈的主要内容,如果未能解决你的问题,请参考以下文章

面试题9-用两个栈来实现一个队列,完成队列的Push和Pop操作

面试题9:用两个栈实现队列

剑指offer-面试题9-用两个栈实现队列-栈和队列

剑指offer第二版-9.用两个栈实现队列

用两个栈来实现一个队列

校招面试 之 剑指offer第9-2题 用两个队列实现一个栈