09题
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
两栈实现队列,不会。
官方题解:入队入到1栈,出队时,将1栈出栈后入到2栈,出2栈,符合队列先进先出。
栈
1、Stack<Integer> stack = new Stack<Integer>();
stack .pop();//输出元素
stack .add();//添加元素
stack .push();//添加元素
2、Deque<Integer> stack=new ArrayDeque<>(); (推荐)
stack .pop();//输出元素
stack.push();
3、LinkedList<Integer> stack = new LinkedList<>();
stack.pop();
stack.add();
4、stack.isEmpty()
5、stack.length()
6、base==NULL 栈不存在
base==top 栈空
09题解
class CQueue {
// 用两个栈实现队列
private Deque<Integer> stack1; //入栈
private Deque<Integer> stack2; //出栈
public CQueue() {
stack1 = new ArrayDeque<>();
stack2 = new ArrayDeque<>();
}
public void appendTail(int value) {
stack1.push(value);
}
public int deleteHead() {
if(stack2.isEmpty()){
if(stack1.isEmpty()) return -1;
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
执行结果:
通过
显示详情
添加备注
执行用时:35 ms, 在所有 Java 提交中击败了93.52%的用户
内存消耗:47.6 MB, 在所有 Java 提交中击败了97.19%的用户
通过测试用例:55 / 55