栈与队列简单1 种解法

#232用栈实现队列

只使用栈的标准操作,实现先进先出的队列接口。

##队列#设计#摊还分析

解题主线

01

输入栈负责接收;输出栈为空时一次性倒入全部元素,最早元素随即位于输出栈顶。

解法 1输入栈 + 输出栈

push 写入输入栈;pop/peek 通过按需搬运后的输出栈完成。

时间复杂度

push O(1),pop/peek 摊还 O(1),单次最坏 O(n)

空间复杂度

O(n)

232. 用栈实现队列 · 输入栈 + 输出栈
import java.util.ArrayDeque;
import java.util.Deque;

final class MyQueue {
    private final Deque<Integer> input = new ArrayDeque<>();
    private final Deque<Integer> output = new ArrayDeque<>();

    public void push(int x) {
        input.push(x);
    }

    public int pop() {
        moveIfNeeded();
        return output.pop();
    }

    public int peek() {
        moveIfNeeded();
        return output.element();
    }

    public boolean empty() {
        return input.isEmpty() && output.isEmpty();
    }

    private void moveIfNeeded() {
        if (output.isEmpty()) {
            while (!input.isEmpty()) output.push(input.pop());
        }
    }
}

push 写入输入栈;pop/peek 通过按需搬运后的输出栈完成。

边界与易错点

  • 输出栈非空时不能再次倒入,否则会破坏现有出队顺序。
  • 每个元素最多进入、离开两个栈各一次,因此操作是摊还 O(1)。
整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

easy/Q232_stackToQueue.java