剑指 Offer 09. 用两个栈实现队列
2021.7.5
非常巧妙,每次都是把队列中的一段消化完,才会在两个栈间交换数据。
class CQueue {
public:
CQueue() {
}
void appendTail(int value);
int deleteHead();
private:
stack<int> st1,st2;
};
//队尾增加数据
void CQueue::appendTail(int value){
st1.push(value);
}
//队头删除数据
int CQueue::deleteHead(){
if(st2.empty()){
while(!st1.empty()){
st2.push(st1.top());
st1.pop();
}
}
if(st2.empty()){
return -1;
}else{
int res = st2.top();
st2.pop();
return res;
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/