用栈实现队列(java数据结构与算法)
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
class MyQueue { private Stack<Integer> a;// 输入栈 private Stack<Integer> b;// 输出栈 public MyQueue() { a = new Stack<>(); b = new Stack<>(); } public void push(int x) { a.push(x); } public int pop() { // 如果b栈为空,则将a栈全部弹出并压入b栈中,然后b.pop() if(b.isEmpty()){ while(!a.isEmpty()){ b.push(a.pop()); } } return b.pop(); } public int peek() { if(b.isEmpty()){ while(!a.isEmpty()){ b.push(a.pop()); } } return b.peek(); } public boolean empty() { return a.isEmpty() && b.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(); */
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/implement-queue-using-stacks