解法:
使用两个栈st1, st2, 入队时元素加入栈st1, 出队时先判断st2是否为空,栈为空的话将st1中的元素出栈并加入st2,相当于st2中的元素对st1中的元素逆置了,即st2中的栈顶元素就是队首元素,然后返回st2栈顶元素;如果st2不为空,则直接返回st2的栈顶元素
class CQueue {
LinkedList<Integer> st1;//入队用
LinkedList<Integer> st2;//出队用
public CQueue() {
st1=new LinkedList<>();
st2=new LinkedList<>();
}
public void appendTail(int value) {
st1.push(value);
}
public int deleteHead() {
if(!st2.isEmpty()){
return st2.poll();
}
while(!st1.isEmpty()){
st2.push(st1.poll());
}
return st2.isEmpty()?-1:st2.poll();
}
}
//O(n)
//O(n)