因此,用于项目一部分的方法要求我检查节点列表中是否已存在E元素。如果不是,则将元素添加到列表中并返回true(因为该方法的类型为boolean)。但是,我在JUnit测试类中总是遇到错误。所以我想知道当前我的代码有什么问题。方法如下:

public boolean add(E element)
{
    for(Node ref = first; ref != null; ref = ref.next)
    {
        first  = new Node(element);

        if(!(element.equals(ref.data)))
        {
            n++;
            add(element);
            return true;
        }
        else if(element.equals(ref.data))
        {
            return false;
        }
    }
return false;
}


我很确定我格式化代码的方式是错误的。我对数组不是很熟悉,因为对数组不是很熟悉,所以这就是代码可能令人遗憾的原因。顺便说一句,n是尺寸。

最佳答案

您的方法似乎结合了递归方法和迭代方法来进行搜索,在任何情况下,您都不会处理将新元素实际添加到列表中的情况。

您没有指定应在何处添加新元素(前面还是后面),所以我假设前面。我还假设代码中的first是类的一个字段,因为没有另外声明。

递归解决方案在这里没有多大意义,并且在这种情况下没有任何优势。因此,这里有一个迭代的解决方案,如果找不到新元素,则将其放在前面:

public boolean add(E element)
{
    for (Node ref = first; ref != null; ref = ref.next)
    {
        if (element.equals(ref.data)) {
            return false;
        }
    }
    Node newFirst = new Node(element);
    newFirst.next = first;
    first = newFirst;
    return true;
}

08-03 13:30
查看更多