我需要为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不应该被附加,这显然是随着头部位置的增加。原型应该有一个参数,数据一个。我怎样才能让它停止增加头部位置?
您需要维护对当前节点的单独引用;不要使用CCD_ 1。我会使用helper方法来完成此操作。
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);
}
请注意,在比较data
值时使用.equals()
而不是==
。我假设head
属于Node
类。如果这不是正确的猜测,请填写实现中的实际类。
除非您的需求在使用递归时很严格,否则我建议您使用迭代遍历列表。递归的效率很低,因为它会创建不必要的函数堆栈。
递归可用于简化非线性遍历或数据结构的代码。
相同使用迭代的代码如下所示。
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;
}