题解 | 用两个栈实现队列
用两个栈实现队列
https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
思路
- stack1 作为输入栈,实现在队列尾部插入整数(push)
- stack2 作为输出栈,实现在队列头部删除整数(pop)
- pop时,需要根据stack2的状态进行操作。如果当前栈为空,需要将栈1中的所有元素放入栈2,实现顺序的反转;如果当前栈2非空,则直接读取栈顶元素,将其弹出
栈的常见基本操作
操作名称 | 英文常用名称 | 功能描述 | 时间复杂度 | 是否改变栈结构 |
入栈 | push / push_back | 将元素添加到栈顶 | O(1) | 是 |
出栈 | pop | 移除并返回栈顶元素 | O(1) | 是 |
获取栈顶元素 | top / peek | 查看(不移除)栈顶元素 | O(1) | 否 |
判断栈是否为空 | empty / isEmpty | 判断栈中是否没有元素 | O(1) | 否 |
获取栈中元素个数 | size / length | 返回栈中当前元素个数 | O(1) | 否 |
正确答案
#include <algorithm>
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 val=stack2.top();
stack2.pop();
return val;
}
private:
stack<int> stack1;
stack<int> stack2;
};
