解题思路
使用两个栈实现队列
设计一个输入栈,一个输出栈
当有输入时,将输出栈的数据全部复制到输入栈中,然后进行压栈
当有输出时,将输入栈的数据全部复制到输出栈中,判断输出栈是否为空,返回数据
isEmpty() 和 empty() 都能够判断是否为空
isEmpty()方法调用elementCount==0
empty()方法调用size()==0
代码
class CQueue {
Stack<Integer> in;
Stack<Integer> out;
public CQueue() { // 初始化
this.in = new Stack();
this.out = new Stack();
}
public void appendTail(int value) {
while(!out.empty()) // 当输出不是空的时候,将输出中的元素复制到输入中
in.push(out.pop());
in.push(value); // 将数据压进栈中
}
public int deleteHead() {
while(!in.empty()) // 将输入栈中的数据全部复制到输出栈中
out.push(in.pop());
return out.empty()? -1 : out.pop(); // 判断是否为空
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/
更新:
Java中栈的实现可以有多种
Stack线程安全效率低,Stack方法都是加锁的
Stack上推荐用队列 Deque< Type > stack = new ArrayDeque<>()
替换Stack
Stack实现方式(常用):
new LinkedList< Type >();
效率高
new Stack();
线程安全