题目
实现思路
- 创建两个栈,A,B;
- appendTail函数,完成对A的入栈;
- deleteHead函数,完成用A的出栈元素对B的入栈,同时B再出栈;
- 其中deleteHead函数:对B入栈,前提B必须为空;当B不为空时候就出栈,出栈前也要判断B是否为空,空的话就返回-1;
实现代码
class CQueue {
public:
//设计一个栈A和一个栈B:
//栈A用来入栈;栈B用栈A出栈,然后入栈B中,最后出栈;
stack<int> A, B;
CQueue() {} //构造函数
//相当于给栈A入栈
void appendTail(int value) {
A.push(value);
}
//相当于给把A栈的元素出栈到B栈,对B栈就是入栈;
//然后再做出栈
int deleteHead() {
//把A栈的元素给B栈前,要判断B栈是是否为空:
//空才可以入栈
if(B.empty()){
while(!A.empty()){
B.push( A.top());
A.pop();
}
}
//B栈不空,那么就出栈,相当于给队头出队
if(!B.empty()){
int temp = B.top();
B.pop();
return temp;
}else{
return -1;
}
}
};
/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/