这道题跟我上一篇文章的思路其实是差不多的,就是反过来而已
但是时间复杂度的话,无疑用栈实现队列要简单得多,基本可以说是O(1)
而用队列实现栈,时间复杂度则达到了O(n)
思路:
每次push时,就把outDeque中符合规则的元素全部push进inDeque,然后交换inDeque和outDeque的指向
不知道小伙伴们有没有注意到,其实这不就是递归的思想么?只着眼于当前事件,并相信完成当前事情的前提已经准备好了
private Queue<Integer> inDeque = new LinkedList<>();
private Queue<Integer> outDeque = new LinkedList<>();
public MyStack() {
}
public void push(int x) {
inDeque.offer(x);
while (!outDeque.isEmpty()){
inDeque.offer(outDeque.poll());
}
Queue<Integer> temp = inDeque;
inDeque = outDeque;
outDeque = temp;
}
public int pop() {
return outDeque.poll();
}
public int top() {
return outDeque.peek();
}
public boolean empty() {
return outDeque.isEmpty();
}