在Java链接列表中按索引检索元素
问题描述:
我正在编写一个链接列表(不使用Java的)并尝试创建一个get方法以通过其索引号返回列表元素。最初,我使用for循环写了这个。我的代码重复失败了一个测试,它在索引0处检索元素(我似乎能够在其他索引处检索元素)。 curr只是为了跟踪当前节点。在Java链接列表中按索引检索元素
public double get(int index) {
Node curr = this.sentinel.next;
for (int i = 0; i < this.size(); i++) {
if (i == index) {
return curr.data;
}
curr = curr.next;
if (index > numElts) {
return Double.NaN;
}
if (index < 0) {
return Double.NaN;
}
}
return Double.NaN;
}
我认为for循环可能是给我麻烦的,所以我把它写成while循环。
while (curr != null) {
if (i == index) {
i++;
return curr.data;
}
curr = curr.next;
}
但是,我仍然无法检索0索引处的元素。我很感激任何关于这些遍历方法如何可能存在问题的意见。我有点迷路。如果我的格式已关闭,也很抱歉,仍然习惯于在此网站上进行格式设置。
答
您正在初始化curr
为sentinal.next
,这不会导致您跳过第一个元素吗?你也应该对每个元素都有一个错误的错误,就好像你的列表是1索引而不是0索引的。
在while循环,你不迭代i
,除非它是等于索引,所以你永远也找不到的情况下i == index
除非index
为0
请注意,您的边界检查(如:'如果( index> numElts){')应该在循环之前,因为它们不会改变循环体内的值。 –
@AndyTurner内部边界检查甚至不必要,因为它们只是迭代到'
billie
@billie是真的,但如果你知道它开始时出现了界限,为什么还要重复整个列表呢? –