队列、栈 O(N)
这道题十分基础,考察到队列与栈的基本知识。
我们用两个栈完成,一个为主栈,一个存放数据
- appendTail
直接在主栈中插入x - deleteHead
由于栈特性先进后出,所以我们每次要将主栈的元素全部压进数据栈中,在对数据栈进行pop操作
对于特殊情况特判-1;
- appendTail O(1)
- deleteHead O(n) 每次需要将主栈元素全部弹出,再压入,所以需要 O(n)O(n) 的时间;
class CQueue {
Stack stack1 = new Stack<>();
Stack stack2 = new Stack<>();
public CQueue() {
}
public void appendTail(int value) {
stack1.push(value);
}
public int deleteHead() {
if (stack2.empty()) {
while(!stack1.empty()) {
stack2.push(stack1.pop());
}
}
if (stack2.empty()) {return -1;}
else {
int res = stack2.pop();
return res ;
}
}
}
原题链接 剑指 Offer 09.用两个栈模拟队列



