解题思路

只使用一个栈 stack1 当作队列,另一个栈 stack2 用来辅助操作。

要想将新加入的元素出现栈底,需要先将 stack1 的元素转移到 stack2,将元素入栈 stack1,最后将 stack2 的元素全部回到 stack1。

代码

class CQueue {

    Stack<Integer> stack1;
    Stack<Integer> stack2;
    public CQueue() {
        stack1=new Stack<>();
        stack2=new Stack<>();//辅助栈

    }
    //入队
    public void appendTail(int value) {
        //把存储数据的栈全部pop出,放到辅助栈
        while(!stack1.isEmpty()) stack2.push(stack1.pop());
        //将value入栈
        stack1.push(value);

        //将辅助栈的元素重新放回数据栈pop
        while(!stack2.isEmpty()) stack1.push(stack2.pop());
    }
    //出队
    public int deleteHead() {
        if(stack1.isEmpty()) return -1;
        else return stack1.pop();

    }
}

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */