思路:
两个队列,一个维护栈的元素,另一个作为缓冲,如果只使用一个队列的话就是不断的记录队列的头部元素,弹出一个元素的同时,将头部元素插入。
代码:
class MyStack {
public:
MyStack() {
}
void push(int x) {
q1.push(x);
}
int pop() {
while(q1.size() != 1){
q2.push(q1.front());
q1.pop();
}
int res = q1.front();
q1.pop();
//cout<<q1.size();
while (q2.size()) q1.push(q2.front()), q2.pop();
return res;
}
int top() {
while(q1.size() != 1){
q2.push(q1.front());
q1.pop();
}
int res = q1.front();
q2.push(res);
q1.pop();
while (q2.size()) q1.push(q2.front()), q2.pop();
return res;
}
bool empty() {
return q1.empty();
}
queue<int> q1;
queue<int> q2;//缓存
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
评论区