225.用队列实现栈
思路:
- 假设每次收到新元素都放入 队列2 中,队列1 用来辅助 队列2
- 第一个元素加入后,此时 队列1 为空,队列2 为一个元素,此时将 队列2 的元素赋给 队列1 并删除
- 当 队列1 元素 >= 1时,为了满足 栈 的先进后出,此时将 队列1的元素 移到 队列2尾
- 将 队列2 赋给 队列1,创建新的空的队列,使 队列2 为空(用创建的方法可以提高效率,若一个个删除复杂度较高)
- 此时 top 和 pop 都是 队列1的头
代码实现
class MyStack {
Queue<Integer> queue1;
Queue<Integer> queue2;
public MyStack() {
queue1 = new LinkedList<Integer>();
queue2 = new LinkedList<Integer>();
}
public void push(int x) {
queue2.add(x);
while (!queue1.isEmpty()) {
queue2.add(queue1.remove());
}
queue1 = queue2;
Queue<Integer> tmp = new LinkedList<Integer>();
queue2 = tmp;
}
public int pop() {
return queue1.remove();
}
public int top() {
return queue1.peek();
}
public boolean empty() {
return queue1.peek() == null && queue2.peek() == null;
}
}