剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
思路:一个栈用来进行入队操作,另一个栈完成出队操作。当我们需要入队时,只需要执行push操作即可,而出队时,由于队列是先进先出,栈是先进后出,即本该出队的元素此时在栈底。我们将stack1的元素弹栈至stack2,这样本该出队的元素就在栈顶了。然后依次按顺序弹栈即可,具体代码如下。
class CQueue {
//stack1-->push stack2-->pop
// java自带的Deque类来实现栈 其中 stack类已经过时了不建议使用
// 如果是队列 java自带的是Queue
Deque<Integer> stack1;
Deque<Integer> stack2;
// 初始化
public CQueue() {
stack1 = new ArrayDeque<Integer>();
stack2 = new ArrayDeque<Integer>();
}
// 入队
public void appendTail(int value) {
stack1.push(value);
}
// 出队
public int deleteHead() {
if(stack2.isEmpty()){
while(!stack1.isEmpty())
stack2.push(stack1.pop());
}
if(stack2.isEmpty())
return -1;
else
return stack2.pop();
}
}
`