LeetCode 225. 用队列实现栈

题目描述

225. 用队列实现栈

思路分析

解法一:单队列旋转(推荐)

核心思路

  • 入栈时把新元素入队,然后把之前的元素依次出队再入队。
  • 这样队头始终是“栈顶”,pop/top 直接操作队头即可。
  • 空间仍然是一个队列结构。


复杂度分析

  • 时间复杂度push 为 O(n),pop/top 为 O(1)。
  • 空间复杂度:O(n),其中 n 为栈内元素数量。
class MyStack {
    private final Deque<Integer> queue = new ArrayDeque<>();

    public MyStack() {}

    public void push(int x) {
        queue.offer(x);

        // 旋转队列,让新元素到队头
        for (int i = 0; i < queue.size() - 1; i++) {
            queue.offer(queue.poll());
        }
    }

    public int pop() {
        return queue.poll();
    }

    public int top() {
        return queue.peek();
    }

    public boolean empty() {
        return queue.isEmpty();
    }
}
type MyStack struct {
    q []int
}

func Constructor() MyStack {
    return MyStack{q: make([]int, 0)}
}

func (s *MyStack) Push(x int) {
    s.q = append(s.q, x)

    // 旋转队列,让新元素到队头
    for i := 0; i < len(s.q)-1; i++ {
        v := s.q[0]
        s.q = append(s.q[1:], v)
    }
}

func (s *MyStack) Pop() int {
    v := s.q[0]
    s.q = s.q[1:]
    return v
}

func (s *MyStack) Top() int {
    return s.q[0]
}

func (s *MyStack) Empty() bool {
    return len(s.q) == 0
}

相似题目

题目 难度 考察点
232. 用栈实现队列 简单 数据结构模拟
155. 最小栈 简单 栈设计
20. 有效的括号 简单 栈匹配
150. 逆波兰表达式求值 中等 栈应用
735. 小行星碰撞 中等 栈模拟
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/75373764
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!