class CQueue {
Deque<Integer> stack1;//从stack1添加元素
Deque<Integer> stack2;//从stack2删除元素
public CQueue() {
stack1 = new LinkedList<>();
stack2 = new LinkedList<>();
}
public void appendTail(int value) {
stack1.push(value);
}
public int deleteHead() {
if(stack2.isEmpty()){//第二个栈空,说明之前stack1倒到stack2的都已经删除了,要倒一轮。
while(!stack1.isEmpty()){//注意:不要用for循环,因为stack1的size一直在变
stack2.push(stack1.pop());
}
}
if(stack2.isEmpty()){//如果stack1也空了,倒完stack2还是空的,这个时候已经没有元素可删了,返回-1.
return -1;
}
else{
int deleteItem = stack2.pop();
return deleteItem;
}
}
}
核心算法:
可以将两个栈看作是一个u型队列,左边栈进,右边栈出。