题目描述
用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和队列头部删除节点的功能。
解题思路:
- 定义两个栈in和out。
- appendTail操作:将数据压入栈in。
- deleteHead操作:如果out栈为空,则将in里的所有数据出栈,再将数据压入栈out里。此时out的栈顶元素即为队里的头元素。
代码
static class CQueue<T> {
Stack<T> in = new Stack<>();
Stack<T> out = new Stack<>();
void appendTail(T data){
in.push(data);
}
T deleteHead() {
if (out.isEmpty()) {
while (!in.isEmpty()) {
out.push(in.pop());
}
}
if (out.isEmpty()) {
throw new RuntimeException("queue is empty!");
}
return out.pop();
}
}
网友评论