题目描述
- 用两个栈模拟一个队列,实现队列基本的入队,出队,取队头的功能。
解题方法1
- 首先准备两个栈s1和s2,s1作为压入栈,s2作为弹出栈。而且必须满足,将s1数据转给s2时必须一次性全部转完,如果s2还有数据就不能把s1数据转给s2。
- 实现入队操作只需要对s1入栈即可。
- 实现出队功能时,如果s2不为空,s2直接出栈。如果s2为空s1有数据,那么把s1的所有数据出栈,入栈到s2,然后s2出栈一个元素。如果s1 s2均为空,说明队列为空抛异常。
- 取队头类似,如果s2不为空返回s2的栈顶,如果s2为空s1不为空,把s1数据挪到s2然后返回s2的栈顶。如果s1s2均为空,说明队列为空。
- 实现代码
class queue{
private Stack<Integer> stack1;
private Stack<Integer> stack2;
queue(){
this.stack1 = new Stack<>();
this.stack2 = new Stack<>();
}
public void add(