题目描述
用两个栈实现一个队列。并实现队列的在尾部添加元素方法和删除头部方法。
分析
使用两个栈,一个用于添加元素,一个用于删除元素
class CQueue {
private Stack<Integer> stack1; # 用于添加元素
private Stack<Integer> stack2; # 用于删除元素
public CQueue() {
stack1 = new Stack<>();
stack2 = new Stack<>();
}
public void appendTail(int value) {
stack1.push(value);
}
public int deleteHead() {
# 如果stack2不为空,就弹出一个元素
if(!stack2.isEmpty()){
return stack2.pop();
}else{ # 否则,就把stack1的全部元素加入到stack2中,这样保持stack2的顶部是最早添加的元素
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.isEmpty() ? -1 : stack2.pop();
}
}
}