题目
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
思路
根据栈的特性,可知inputstack的底部是最新进入的元素,顶部是最先进入的元素。
outputstack用于保存队列头部元素,当为空时,通过outputstack.push(inputstack.pop());
来翻转队列,使得inputstack的底部是最先进入的元素,顶部是最新进入的元素。
代码
class CQueue {
Stack<Integer> inputstack;
Stack<Integer> outputstack;
int size;
public CQueue() {
inputstack = new Stack<>();
outputstack = new Stack<>();//存储头部元素
}
public void appendTail(int value) {
inputstack.push(value);
size++;
}
// 若队列中没有元素,则返回-1
// 如何找到头部元素
public int deleteHead() {
Integer tmp = -1;
if(size < 1){
return tmp;
}
if(outputstack.isEmpty()){
while (!inputstack.isEmpty()){
outputstack.push(inputstack.pop());//将输入队列逆序
}
}
size--;
tmp = outputstack.pop();
return tmp;
}
}