题目解析:
用两个栈实现一个队列,简而言之就是要用两个栈实现先入先出的存取方法。
示例中的CQueue就是创建队列的意思
appenTail就是添加结点的意思
执行上述两个操作的时候输出空就可以
执行deleteHead时,如果没有可以取的就输出-1,如果有可以取的就输出取出的那个数字
基本思路:
定义两个栈,一个当作输入栈用于appendTail操作,一个当作输出栈用于deleteHead操作.
当进行deleteHead操作时,先判断输出栈是否为空,若输出栈为空,则将输入栈的所有数据从栈顶依次取出填入输出栈。
这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。
代码实现:
class CQueue {
//两个栈,一个出栈,一个入栈
private Stack<Integer> stack1;
private Stack<Integer> stack2;
public CQueue() {
stack1 = new Stack<>();
stack2 = new Stack<>();
}
public void appendTail(int value) {
//push()方法用于将给定元素(value)推入堆栈
stack1.push(value);
}
public int deleteHead() {
//如果栈2不为空,则从栈2栈顶取出一个元素
if(!stack2.isEmpty()){
return stack2.pop();
}else{
//当栈2为空,栈1不为空时,从栈1取出所有元素放入栈2
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
//此时如果栈1栈2都为空了,则输出-1,否则则从栈2栈顶取出一个元素
return stack2.isEmpty() ? -1 : stack2.pop();
}
}
}