题目概述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
考察点
栈和队列
时间复杂度
入栈O(1)
出栈O(n)
实现思路
-
用两个栈来实现队列,栈1的话用来入队,队列每进入一个元素就入栈1,栈2的话用来出队,队列如果要出队,首先判断栈2是不是空,是空,就把栈1弹出来进入栈2(因为栈是先入后出,两次先入后出就是先入先出了,负负得正嘛~),然后从栈2开始弹,如果栈2不为空,直接从栈2开始弹
Java代码(可以直接复制使用)
public class QueueBasedOnStack {
private Stack<Integer> in = new Stack<Integer>();
private Stack<Integer> out = new Stack<Integer>();
public void push(int node) {
in.push(node);
}
public int pop() {
if (out.isEmpty()) {
//输出栈为空 先把数据从输入栈转到输出栈再弹(负负得正)
while (!in.isEmpty()) {
out.push(in.pop());
}
return out.pop();
} else {
//输出栈不为空,直接弹
return out.pop();
}
}
}
有问题的小伙伴可以在下方留言哦