📟作者主页:慢热的陕西人
🌴专栏链接:力扣刷题日记
📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言
牛客热题:用两个栈实现队列
题目链接
用两个栈实现队列_牛客题霸_牛客网 (nowcoder.com)
思路
- 首先队列是先进先出
- 而栈是先进后出
- 那么先用一个栈存储push的数据,当我们需要pop拿数据的时候,将其中存储数据的栈中的数据,转换到另一个栈那么出栈的顺序就和出队一样了。
代码
class Solution
{
public:
void push(int node)
{
stack1.push(node);
}
int pop()
{
//如果stack2有值,就在stack2拿
if(!stack2.empty())
{
int temp = stack2.top();
stack2.pop();
return temp;
}
else//如果stack2没有值,那么就将对应的stack1中的所有值push进stack2内
{
while(!stack1.empty())
{
int temp = stack1.top();
stack1.pop();
stack2.push(temp);
}
int temp = stack2.top();
stack2.pop();
return temp;
}
}
private:
stack<int> stack1;
stack<int> stack2;
};
复杂度
时间复杂度:O(N) , 每次push的时间复杂度是O(1), 但是pop的时候,因为存在需要将其中的栈的数据搬运到另一个栈所以需要O(N)的复杂度,其中N是对应的搬运的数据的个数
空间复杂度:O(1), 除了题目给出的栈以外,只使用了常数个额外的变量空间