遍历链接列表时保持头部参考?

时间:2016-01-29 13:59:31

标签: java reference linked-list

我正在修改链接列表,在我使用的书中,他们建议使用以下代码来搜索特定值:

public ListElement<Integer> find( ListElement<Integer> head, int data ){
   ListElement<Integer> elem = head;
   while( elem != null && elem.value() != data ){
       elem = elem.next();
   }
   return elem;
}

但是,我们不能直接迭代head吗?

1 个答案:

答案 0 :(得分:3)

你可以 - 但那会是一个有点误导性的代码。如果我查看一个名为head的变量,我希望它是列表的头部 - 而如果我这样做:

head = head.next();

...然后head指的是不是列表头部的内容。当变量名称暗示某些不正确的东西时,它总是令人担忧。它在技术上可行,但这不是一个坏主意。

我个人会更喜欢编写代码:

public ListElement<Integer> find(ListElement<Integer> head, int data) {
    for (ListElement<Integer> current = head;
           current != null;
           current = current.next()) {
        if (current.value == data) {
            return current;
        }
    }
    // No entry found
    return null;
}

这样,“未找到”的情况与“找到的”情况更加明显不同 - 例如,如果找不到该值,则更容易将其更改为抛出异常。