用两个栈实现队列
思路:
1.由于队列是先进先出的,然而栈是后进先出的
2.所以想要将入栈的元素模拟队列的结果,即先入的节点先出
3.则需要一个新的栈进行辅助,将栈1元素先压入栈2中,就实现了一次反转
4.此时栈2的栈顶的就是第一个元素,让这个元素出栈,就实现了先入先出
5.再将栈2中的元素再弹出压回栈1中
代码:
class Solution
{
public:
//对于插入,则直接将节点插入栈1中即可
void push(int node) {
stack1.push(node);
}
//由于队列是先进先出的,但是栈是后进先出的,所以当需要把最早入栈的出栈
//则需要先把栈中该数上面的数都移走,所以需要一个辅助的栈,将栈1的点都弹出并压入栈2中,则次数栈2的栈顶就是最早进去的元素,就让它出栈2
//再将栈2中的元素重新返回栈1中
int pop() {
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
int res=stack2.top();
stack2.pop();
while(!stack2.empty()){
stack1.push(stack2.top());
stack2.pop();
}
return res;
}
private:
//设置两个栈来实现队列
stack<int> stack1;
stack<int> stack2;
};