我的递归查找(T数据)方法正在调整我的LinkedList ..如何阻止它?

时间:2012-03-14 02:54:16

标签: java recursion linked-list

我需要为使用递归的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。如何让它停止增加头部位置?

2 个答案:

答案 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;
}