题目描述
题干
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例输入
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
限制
1 <= values <= 10000
最多会对 appendTail、deleteHead 进行 10000 次调用
解题思路
- 栈:后入先出
- 队列:先入先出
那么借助栈的性质,可以使用两个栈(辅助栈temp,队列栈queue)来实现一个队列的插入和删除操作,如下图所示:
代码实现——Java
public class CQueue {
Stack<Integer> temp;
Stack<Integer> store;
public CQueue() {
temp = new Stack<>();
store = new Stack<>();
}
public void appendTail(int value) {
temp.push(value);
}
public int deleteHead() {
if (!store.empty()) return store.pop();
while (!temp.empty()) {
store.push(temp.pop());
}
if (!store.empty()) return store.pop();
else return -1;
}
}