- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
其实这个题拥有一个思路,多种写法
一组数据进入一个栈==>先进后出的顺序
一组数据进入一个栈后弹出进入另一个栈==>先进先出
也就是队列的顺序结构。
这个题目的关键在于恢复原来的状况
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
int temp = 0;
int ret = 0;
if(stack1.empty()){
return 0;
}
while(!stack1.empty()){
temp = stack1.top();
stack2.push(temp);
stack1.pop();
}
ret = stack2.top();
stack2.pop();
while(!stack2.empty()){
temp = stack2.top();
stack1.push(temp);
stack2.pop();
}
return ret ;
}
private:
stack<int> stack1;
stack<int> stack2;
};
- 方案
第一个是push()将所有数据入栈。
第二个是pop()将所有数据由
第一步 :栈 1->2->3->…->X 到另一个栈 x->…->3->2->1
第二步 :将x移除栈 x-1->…->3->2->1
第三步 :将x-1->…->3->2->1到原来的栈1->2->3->…->x-1