如何在单链表中实现indexOf方法



下面是我在Java 中的代码

public int indexOf(E item){
    Node<E> node =head;
    for(int i=0; i<size;i++) {
        node=node.next;
        if(node.data==item){
            return i+1;
        }
    }
    return -1; 
}

我的代码是正确的还是需要改进?

我的代码正确吗。。。

这取决于您的要求。如果需要实现java.util.List API,那么javadoc会这样说:

"…更正式地说,返回最低索引i,使得(o==null?get(i)==null:o.equals(get(i))),或者如果没有这样的索引,则返回-1。"

您使用的是==而不是equals。。。这是不正确的。

如果您不需要来实现List,那么我们无法评论==的正确性。。。或者就代码的任何方面而言。(例如,需求可以说列表元素位置从1开始!!)

还是我需要改进它?

如果它不符合要求,您需要修复它。(但我们通常不会将错误修复描述为"改进"。)

如果你要求进行代码审查,最好在代码审查网站上提出这样的问题。

但从风格上讲,我不会使用for循环。我会使用while循环,并使用node == null作为循环终止条件。(您的代码隐含地依赖于size是否正确。如果不正确,您可能会得到NPE。)

如果data不是基元类型,为了确保进行彻底的比较,应该使用node.data.equals(item)

最新更新