解题思路
只使用一个栈 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();
*/