用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:
将压入队列的数先压入stack1,再弹到stack2.就可以实现队列的"先入先出"的功能.
但值得注意的是,
1.在队列进行"入队"操作的时候,其实就是把数字压入stack1.但是将数字压入stack1时候要保证stack2是空的,如果不是空的,就得先将stack2中的值先压入stack1,然后再将入队的值压入stack1中.因为如果stack2中有值的话,那说明这些值是比刚入队的值更早入队的,所以要把这些stack2中的值先压入stack1,再把刚入队的值压入stack1.
2.在队列进行"出队"的操作时,其实就是将stack2中的数字弹出,但是在弹出时需要保证stack1是空的.因为如果stack1中有值的话,那说明stack1中的值是更早入队的,按照队列先进先出的性质,需要将stack1中的值先弹出.所以需要把stack1中的值都先弹出到stack2中.然后stack2执行弹出栈顶的操作,也就是"出队"的操作.
class Solution
{
public:
void push(int node) {
while(!stack2.empty())
{
int p = stack2.top();
stack2.pop();
stack1.push(p);
}
stack1.push(node);
}
int pop() {
while(!stack1.empty()){
int q = stack1.top();
stack1.pop();
stack2.push(q);
}
int re = stack2.top();
stack2.pop();
return re ;
}
private:
stack<int> stack1;
stack<int> stack2;
};