题目
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
思路:创建一个入栈,一个出栈,一个元素先入 “入栈”,弹出后再压入“出栈”就可以达到先进先出的效果,等同队列。
需要注意的点是,在删除头部元素方法中,一定要注意先判断的先后顺序,1.先判断out栈是否存在元素,如果存在就直接弹出该元素,即为删除队尾元素
2.一定要先判断out栈是否为空,因为如果out栈不为空,而直接判断in栈为空而直接返回-1这种情况就错了。
class CQueue {
Stack<Integer> in,out;
public CQueue() {
in=new Stack<Integer>();在CQueue类中添加一个in栈和一个out栈
out=new Stack<Integer>();
}
public void appendTail(int value) {
in.push(value);
}
public int deleteHead() {
if(!out.isEmpty()){//先判断out栈是否为空,不为空直接弹出元素,为空了之后再判断in栈为不为空,如果这时in栈为空,才能说明整个队列中没有任何元素,从而返回-1.
return out.pop();
}
if(in.isEmpty()){
return -1;
}
while(!in.isEmpty()){//当out站为空,而in栈不为空时,只要in栈不为空,就把in栈中的元素弹出来压入out栈中,从而使out栈的栈顶元素为队列的队尾元素。
out.push(in.pop());
}
return out.pop();//最后弹出这个队尾元素。
}
}