在Java链表中按索引检索元素

时间:2017-09-07 22:48:46

标签: java for-loop while-loop linked-list traversal

我正在编写一个链表(不使用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索引处检索元素。我很感激有关这些遍历方法可能存在问题的任何意见。我有点失落。如果我的格式化已关闭,仍然会习惯于在此网站上进行格式化。

1 个答案:

答案 0 :(得分:0)

您正在将curr初始化为sentinal.next,这不会导致您跳过第一个元素吗?对于每个元素,您还应该有一个off-by-one错误,就像您的列表是1索引而不是0索引一样。

在while循环中,除非它等于索引,否则你不会迭代i,所以除非i == index为0,否则你永远不会发现index的情况。