用两个栈实现一个队列。
队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
队列Q:1,2,3,4,5 ——>依次进入栈A
A:(栈底)1,2,3,4,5 (栈顶) ——>A出栈到B
B:(栈底)5,4,3,2,1 (栈顶)
- 队列尾部插入整数:插入A
- 在队列头部删除整数:B出栈
Python 和 Java 的栈的 pop() 函数返回栈顶元素,而 C++ 不返回;
因此对于 C++ ,需要先使用 top() 方法暂存栈顶元素,再执行 pop() 出栈操作。
class CQueue {
public:
stack<int> A, B;
CQueue() {}
void appendTail(int value) {
A.push(value);
}
int deleteHead() {
if(B.empty()){
while(!A.empty()){
B.push( A.top());
A.pop();
}
}
if(B.empty()){
return -1;
}
else {
int tmp = B.top();
B.pop();
return tmp;
}
}
};