我需要为使用递归的LinkedList创建一些方法。 我有一些很好,但这是给我带来麻烦的一个:
public boolean find(T data){
if(head == null)
return false;
else{
if(head.data == data)
return true;
else{
head = head.next;
return find(data);
}
}
}
它应该在LinkedList中找到一个元素,但问题是,不应该追加List,这显然是我的头部位置增加。 原型应该有1个参数,数据1。如何让它停止增加头部位置?
答案 0 :(得分:2)
您需要维护对当前节点的单独引用;不要使用head
。我会使用辅助方法来做到这一点。
public boolean find(T data){
return find(data, head);
}
private boolean find(T data, Node current) {
if (current == null) return false;
if (current.data.equals(data)) return true;
current = current.next;
return find(data, current);
}
请注意,在比较.equals()
值时,请使用==
代替data
。我假设head
属于Node
类。如果这不是正确的猜测,请填写实施中的实际类。
答案 1 :(得分:0)
除非您的要求在使用递归方面很严格,否则我建议您使用迭代来遍历列表。递归效率低下,因为它会创建不必要的函数堆栈。
递归在简化非线性遍历或数据结构的代码时非常有用。
使用迭代的相同代码如下所示。
public boolean find(T data) {
boolean found = false;
T current = head;
while(current != null) {
if(current.data.equals(data)) {
found = true;
break;
}
current = current.next;
}
return found;
}