在链接列表中查找最小值

时间:2018-05-01 22:42:58

标签: java linked-list doubly-linked-list

我正在尝试在Vertices的链接列表中找到min。这就是我写的,但它是错误的。我没有收到错误,但我的程序不起作用,我认为这是错误的来源。我究竟做错了什么?

      Iterator itr = vertices.iterator();
      Vertex smallest= getVertex(s);
      Vertex temp;
      while (itr.hasNext()){
          smallest=(Vertex)itr.next();
           if(itr.hasNext() && vertices.size()> 1 ){//there are at least 2 vertices left
                temp = (Vertex)itr.next();
                if (temp.distance< smallest.distance){
                    smallest = temp;
                }
          }
     }

1 个答案:

答案 0 :(得分:5)

问题是你在每次迭代时使用迭代器中的两个元素(通过itr.next()),所以这意味着你只是在比较一些元素:

1----2----3-----4-----5-----6
\----/    \-----/     \-----/

你比较1和2; 3和4; 5和6;但不是2和3; 4和5。

解决此问题的最简单方法是保留前一个顶点:

Vertex prev = itr.next();
while (itr.hasNext()) {
  Vertex current = itr.next();

  // Compare prev and current

  prev = current;
}

另请注意,如果使用类型参数声明迭代器,则可以避免强制转换(Vertex)

Iterator<Vertex> itr = vertices.iterator();