题目描述
题解
队列是先进先出的。栈是先进后出的,也就是说可以用栈实现反序。那么我们就可以用两个栈,实现两次反序,就变成先进先出的了。
- 创建两个栈,s1负责入栈,s2负责出栈
- 入栈时,直接加入s1栈顶
- 出栈时,如果s2不为空的话,直接输出s2栈顶。如果s2为空的话,把s1中的元素都加入到s2之中,再输出。
class CQueue {
Deque<Integer> s1;
Deque<Integer> s2;
public CQueue() {
s1 = new LinkedList<>();
s2 = new LinkedList<>();
}
public void appendTail(int value) {
s1.addLast(value);
}
public int deleteHead() {
if (!s2.isEmpty()){
return s2.pollLast();
}else {
while (!s1.isEmpty()){
s2.addLast(s1.pollLast());
}
return s2.isEmpty() ? -1 : s2.pollLast();
}
}
}