思路:当队列入队的时候,将元素入栈(instack),当队列出栈的时候,先判断栈(outstack)是否为空,如果为空,则将栈(instack)的元素全部放入栈(outstack)中,然后取出栈(outstack)顶元素;如果栈(outstack)不为空,则直接取出栈(outstack)顶元素。
class MyQueue {
private:
stack<int> instack,outstack;
void inout(){
while(!instack.empty()){
outstack.push(instack.top());
instack.pop();
}
}
public:
MyQueue() {}
void push(int x) {
instack.push(x);
}
int pop() {
if(outstack.empty()){
inout();
}
int x = outstack.top();
outstack.pop();
return x;
}
int peek() {
if(outstack.empty()){
inout();
}
return outstack.top();
}
bool empty() {
return instack.empty() && outstack.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/