友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

232. Implement Queue using Stacks

Implement the following operations of a queue using stacks.

  • push(x) — Push element x to the back of queue.

  • pop() — Removes the element from in front of queue.

  • peek() — Get the front element.

  • empty() — Return whether the queue is empty.

Example:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);
queue.peek();  // returns 1
queue.pop();   // returns 1
queue.empty(); // returns false

Notes:

  • You must use only standard operations of a stack — which means only push to top, peek/pop from top, size, and is empty operations are valid.

  • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.

  • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).

思路分析

  • 一刷

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
 * @author D瓜哥 · https://www.diguage.com
 * @since 2024-09-15 21:11:15
 */
class MyQueue {
  Deque<Integer> inStack;
  Deque<Integer> outStack;


  public MyQueue() {
    inStack = new LinkedList<>();
    outStack = new LinkedList<>();
  }

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

  public int pop() {
    int peek = peek();
    outStack.pop();
    return peek;
  }

  public int peek() {
    if (!outStack.isEmpty()) {
      return outStack.peek();
    } else {
      while (!inStack.isEmpty()) {
        outStack.push(inStack.pop());
      }
    }
    // TODO 这里, outStack 有可能是空啊?!
    return outStack.peek();
  }

  public boolean empty() {
    return inStack.isEmpty() && outStack.isEmpty();
  }
}