我正在修改链表,在我使用的书中,他们建议使用以下代码来搜索特定值:
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
吗?
你可以 - 但那将是一个有点误导性的代码段。如果我查看一个名为 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;
}
这样,"未找到"大小写与"已找到"大小写更自然地不同 - 例如,如果找不到值,则更改它以引发异常会更容易。