剑指offer5_用两个栈实现队列_题解
用两个栈实现队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
分析
方案一:模拟
队列是先进先出 \(FIFO\) ,栈是先进后出 \(FILO\)
\(push\) 操作:直接往 \(stack1\) 中 \(push\)
\(pop\) 操作:如果 \(stack2\) 为空,那么需要将\(stack1\) 中的数据转移到 \(stack2\) 中,然后再对 \(stack2\) 进行 \(pop\),如果 \(stack2\) 不为空,直接 \(pop\) 即可
代码
/**
1.时间复杂度:O(n)
push操作为O(1),pop操作为O(1)
2.空间复杂度:O(n)
**/
class Solution
{
public:
// 直接往stack1中push
void push(int node)
{
stack1.push(node);
}
// 分情况讨论
int pop()
{
// 如果stack2为空,需要将stack1中的数据转移到stack2中,然后再对stack2进行pop
if (stack2.empty())
{
while (!stack1.empty())
{
int top = stack1.top();
stack2.push(top);
stack1.pop();
}
}
// 如果stack2不为空,直接pop
int top = stack2.top();
stack2.pop();
return top;
}
private:
stack<int> stack1;
stack<int> stack2;
};