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

时间:2015-03-01 01:42:07

标签: java list data-structures

以下是我在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; 
}

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

2 个答案:

答案 0 :(得分:1)

  

我的代码是否正确......

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

  

&#34; ...更正式地,返回最低的索引i,使得(o == null?get(i)== null:o.equals(get(i)))或 - 1如果没有这样的索引。&#34;

您正在使用==代替equals ...这是不正确的。

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

  

......或者我需要改进吗?

如果它不符合要求,您需要解决这个问题。 (但我们通常不会将错误修复描述为&#34;改进&#34;。)

如果您要求进行代码审核,则可以在代码审核网站上更好地询问此类问题。

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

答案 1 :(得分:0)

如果data不是原始类型,为了确保彻底比较,您应该使用node.data.equals(item)