题解 | 用两个栈实现队列

用两个栈实现队列

https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6

思路

  1. stack1 作为输入栈,实现在队列尾部插入整数(push)
  2. stack2 作为输出栈,实现在队列头部删除整数(pop)
  3. 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;
};
全部评论

相关推荐

MinGW_:直接投那个前端移动端就行,美团前端的岗位一直是叫这个名字的,哪怕是做内部系统只有网页没有移动端的组,招人的岗位也是这个名字
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务