题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
分析
假设两个栈分别是Stack1, Stack2。每次push一个元素,都将直接放入Stack1中,同时每删除一个元素,都将先判断Stack2,此时分两种情况:如果Stack2为空,则将Stack1中的元素依次pop到Stack2中去,由于队列是先进先出,此时Stack2中的栈首元素就是之前最早入队列的元素,所以此时pop栈Stack2中的首元素即可;如果栈Stack2非空,说明之前缓存到Stack2中的元素还没有全部删除,而Stack2中的元素必然比此时Stack1中的元素要先进入队列,所以在Stack2非空的情况下直接删除Stack2中栈首元素即可。
我的提交
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
}
int data = stack2.top();
stack2.pop();
return data;
}
private:
stack<int> stack1;
stack<int> stack2;
};