解题思路:
使用两个栈,一个栈a用来存储每一次操作得到的队列,另一个栈b作为辅助栈。
- 在每一次push操作的时候,先把a中排好的队列(先进先出),依次push进栈b,所以,栈b中元素的排序就是后进先出的栈顺序;
- 然后把新的元素x push进栈b,整个栈b就是后进先出的栈顺序;
- 然后再把b中的元素依次push进栈a,得到的栈a就是先进先出的队列顺序。
class MyQueue {
stack<int> a, b;
public:
/** Initialize your data structure here. */
MyQueue() {
// nothing to do
}
/** Push element x to the back of queue. */
void push(int x) {
while(!a.empty()){
b.push(a.top());
a.pop();
}
b.push(x);
while(!b.empty()){
a.push(b.top());
b.pop();
}
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
int num = a.top();
a.pop();
return num;
}
/** Get the front element. */
int peek() {
return a.top();
}
/** Returns whether the queue is empty. */
bool empty() {
return a.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();
*/