题解 | #用两个栈实现队列#

用两个栈实现队列

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

//这题比较容易就能想到利用栈的先进后出的特性,来在入队时放进栈1,出队时弹到栈2里,将“后出”通过栈的先进后出的特性给逆序成“先出”。
//唯一的问题在于什么时候弹。这个我自己想的时候没考虑好。看了题解说“栈2里还有东西时就pop栈2,没东西时才把栈1里的挨个弹到栈2里”。而且分析下来,每个元素最多进栈2出栈2一次,所以看起来是每个元素出队时都需要遍历栈1中其他元素,好像是O(n)的时间复杂度,而实际上平均下来只有O(1)。
#include <climits>
class Solution {
  public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        int result = INT_MAX;
        if (stack2.empty()) {
            while (!stack1.empty()) {
                int temp = stack1.top();
                stack1.pop();
                stack2.push(temp);
            }
        }
        result = stack2.top();
        stack2.pop();
        return result;
    }

  private:
    stack<int> stack1;
    stack<int> stack2;
};

全部评论

相关推荐

牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务