232.用栈实现队列
- 学习链接:
- 题目分析:
- 一个栈进,一个栈出。
- 要模拟获取队列顶元素或者移除队列出口元素时,需要在出口栈为空时将入口栈都复制过来,然后移除出口栈栈顶元素。
- 代码:
class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
dumpStackIn();
return stackOut.pop();
}
public int peek() {
dumpStackIn();
return stackOut.peek();
}
public boolean empty() {
return stackIn.isEmpty() && stackOut.isEmpty();
}
private void dumpStackIn(){
if (!stackOut.isEmpty()) return;
while (!stackIn.isEmpty()) {
stackOut.push(stackIn.pop());
}
}
}
- 心得
- 写一个方便自己的工具类。
225. 用队列实现栈
- 学习文章链接:
- 题目分析:
- 让从队列前端弹出的元素,再添加回队列后端
- 为什么先有一个size–?去目标元素后的长度,这样循环size - 1次,队列出口正好是栈顶元素。
- 代码:
class MyStack {
Deque<Integer> deque;
public MyStack() {
deque = new ArrayDeque<>();
}
public void push(int x) {
deque.addLast(x);
}
public int pop() {
int size = deque.size();
size--;
while (size-- > 0) {
deque.addLast(deque.peekFirst());
deque.pollFirst();
}
return deque.pollFirst();
}
public int top() {
return deque.peekLast();
}
public boolean empty() {
return deque.isEmpty();
}
}