【发布时间】:2017-09-07 22:48:45
【问题描述】:
我正在编写一个链接列表(不使用 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 的元素。我感谢任何有关这些遍历方法可能存在问题的意见。我有点迷路了。如果我的格式已关闭,也很抱歉,仍然习惯于在此站点上进行格式设置。
【问题讨论】:
-
请注意,您的边界检查(例如
if (index > numElts) {)应该在循环之前,因为它们不会改变循环体内的值。 -
@AndyTurner 甚至不需要内部边界检查,因为它们只是迭代到
< this.size()。 -
@billie 是的,但是如果您知道一开始就超出范围,为什么还要麻烦迭代整个列表呢?
标签: java for-loop while-loop linked-list traversal