题目链接:请点击
思路:
栈的特点是只能在栈顶进行插入或删除;而队列的特点是在队头删除,队尾插入。
用栈1来压入数据,依次压入(栈底)1,2,3(栈顶)。按照队列的性质,栈底(不能删除)是队头,栈顶(可以删除)是队尾。那么若想删除队头的数据(1),就需要把栈1的数据,再次压入栈2,此时,栈2数据依次是3,2,1(栈顶),可以删除1。
然后,需要考虑到,当栈2非空时,把栈1的数据压入栈2是会打乱顺序的。比如,栈1空,栈2的数据依次是3,2,1(栈2顶,队头),现在把数据4插入队头(实际上就是压入栈1,栈1再弹出然后再压入栈2),这样,栈2的数据是3,2,1,4。但是,实际上,我们要的数据顺序是(队尾插入)4,3,2,1(队头删除)
代码
class Solution
{
public:
void push(int node) {
stack1.push(node);//往stack1压入
}
int pop() {
if(stack2.empty()){//当栈2空时,将栈1的数据压入栈2
while(!stack1.empty()){//循环依次将栈1的数据全部压入
int node = stack1.top();
stack1.pop();
stack2.push(node);
}
}
int node = stack2.top();
stack2.pop();
return node;
}
private:
stack<int> stack1;
stack<int> stack2;
};