我正在编写一个链表(不使用Java),并尝试创建一个get方法,通过索引号返回列表元素。最初,我使用for循环编写了这个。我的代码反复失败了一个测试,它在索引0处检索元素(我似乎能够检索其他索引处的元素)。 curr只是让我跟踪当前节点。
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索引处检索元素。我很感激有关这些遍历方法可能存在问题的任何意见。我有点失落。如果我的格式化已关闭,仍然会习惯于在此网站上进行格式化。
答案 0 :(得分:0)
您正在将curr
初始化为sentinal.next
,这不会导致您跳过第一个元素吗?对于每个元素,您还应该有一个off-by-one错误,就像您的列表是1索引而不是0索引一样。
在while循环中,除非它等于索引,否则你不会迭代i
,所以除非i == index
为0,否则你永远不会发现index
的情况。