2.用两个栈实现一个队列

分析:栈是先进后出,队列是先进先出,所以我们要借助一个栈来反转元素的顺序。比如两个栈,pushStack和popStack,当队列添加元素时都用pushStack存放,当队列移除元素时用popStack弹出的元素,popStack栈的作用就是反转pushStack栈中元素的顺序。

步骤:当队列用add方法添加元素时都存入pushStack中,当队列用poll(poll方法移除元素,当队列为空则返回null)方法移除元素时,先判断popStack是否为空,如果popStack为空则接着判断pushStack是否为空,如果pushStack也为空则表明此时两个栈都没有元素,队列返回为空,如果pushStack中有元素则将pushStack中的所有元素依次弹出并添加到popStack栈中,最后将popStack的栈顶元素弹出即实现了队列的移除元素的方法。

附上Java代码实现:

public class DoubleStackQueue{
    Stack<Integer> pushStack=new Stack<>();//存放队列添加的元素
    Stack<Integer> popStack=new Stack<>();//当元素出队列时,先将pushStack里的元素添加到popStack中以反转元素在栈中的顺序
    public void add(Integer num){
        pushStack.push(num);
    }
    public Integer remove(){
        if(!popStack.empty()){
            return popStack.pop();
        }else{
            if(pushStack.isEmpty()){
                return null;
            }else{
                while (!pushStack.isEmpty()){
                    popStack.push(pushStack.pop());
                }
            }
        }
        return popStack.pop();
    }
}
原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10128905.html