解题思路:
1.使用两个栈 ,instack ,outstack ,一个作为输入,一个作为输出。
2.push的时候向 instack里面入 , pop的时候从 outstack里面出数据 ,如果outstack.empty() == true, 那么就把instack 里面的值 弹出到 outstack 中 ,然后 outstack 再pop数据。
3.只有 instack 和 outstack 同时为空的时候 这个队列才为空。
class MyQueue
{
private:
stack<int> inStack, outStack;
void in2out()
{
while (!inStack.empty())
{
outStack.push(inStack.top());
inStack.pop();
}
}
public:
MyQueue()
{}
void push(int x)
{
inStack.push(x);
}
int pop()
{
if (outStack.empty())
{
in2out();
}
int x = outStack.top();
outStack.pop();
return x;
}
int peek()
{
if (outStack.empty()) {
in2out();
}
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();
*/