【LeetCode】232. 用栈实现队列(Java)

    科技2022-09-07  109

    使用栈实现队列的下列操作:

    push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。

    说明:

    你只能使用标准的栈操作 – 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。 class MyQueue { Stack<Integer> A, B; /** Initialize your data structure here. */ public MyQueue() { A = new Stack<>(); //主栈 B = new Stack<>(); //辅助栈 } /** Push element x to the back of queue. */ public void push(int x) { int size = A.size(); //先把主栈A的数据都移到辅助栈B中 for (int i = 0; i < size; i++) B.push(A.pop()); //添加插入的数据 A.push(x); //再把辅助栈B的数据放回主栈A中 for (int i = 0; i < size; i++) A.push(B.pop()); } /** Removes the element from in front of queue and returns that element. */ public int pop() { if (empty()) return -1; return A.pop(); } /** Get the front element. */ public int peek() { return A.peek(); } /** Returns whether the queue is empty. */ public boolean empty() { return A.isEmpty(); } } /** * Your MyQueue object will be instantiated and called as such: * MyQueue obj = new MyQueue(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.peek(); * boolean param_4 = obj.empty(); */

    Processed: 0.011, SQL: 9