栈算法之【用栈实现队列】
目录
LeetCode-232题
LeetCode-232题
仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty)
实现MyQueue类:
- void push(int x) 将元素 x 推到队列的末尾
- int pop() 从队列的开头移除并返回元素
- int peek() 返回队列开头的元素
- boolean empty() 如果队列为空,返回 true ;否则,返回 false
class MyQueue {// 维护两个栈private final LinkedList<Integer> stack1;private final LinkedList<Integer> stack2;public MyQueue() {stack1 = new LinkedList<>();stack2 = new LinkedList<>();}// 添加元素public void push(int x) {// 直接将元素添加到stack1中stack1.push(x);}// 删除元素public int pop() {// 从stack2中删除栈顶元素,如果stack2为空,则先将stack1中所有元素添加到stack2中transfer();return stack2.pop();}private void transfer() {if (stack2.isEmpty()) {while (!stack1.isEmpty()) {stack2.push(stack1.pop());}}}// 查看元素public int peek() {transfer();return stack2.peek();}// 是否为空集合public boolean empty() {return stack1.isEmpty() && stack2.isEmpty();}
}