

写这道题的原因是两次做法,时间是差距很大的,主要是记住:
当第二个栈空的时候,再一次性导入,没必要每次都插进去!
第一次做法:
class CQueue {
Stack<Integer> stack;
Stack<Integer> stack2;
public CQueue() {
stack = new Stack<Integer>();
stack2 = new Stack<Integer>();
}
public void appendTail(int value) {
stack.push(value);
}
public int deleteHead() {
if(stack.empty()){
return -1;
}
while(!stack.empty()){
stack2.push(stack.pop());
}
int res = stack2.pop();
while(!stack2.empty()){
stack.push(stack2.pop());
}
return res;
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/
优化做法:
class CQueue {
Deque<Integer> stack1;
Deque<Integer> stack2;
public CQueue() {
stack1 = new LinkedList<Integer>();
stack2 = new LinkedList<Integer>();
}
public void appendTail(int value) {
stack1.push(value);
}
public int deleteHead() {
// 如果第二个栈为空
if (stack2.isEmpty()) {
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
}
if (stack2.isEmpty()) {
return -1;
} else {
int deleteItem = stack2.pop();
return deleteItem;
}
}
}
167

被折叠的 条评论
为什么被折叠?



