java - 在链接列表中查找最小值

标签 java linked-list doubly-linked-list

我正在尝试在顶点链接列表中找到最小值。这是我写的,但它是错误的。我没有收到错误,但我的程序无法运行,我认为这是错误的来源。我究竟做错了什么?

      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;
                }
          }
     }

最佳答案

问题是您在每次迭代中都从迭代器中消耗了两个元素(通过 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();

关于java - 在链接列表中查找最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50124846/

相关文章:

java - 有关执行操作和使用具有多个 View 的单个模型的不确定性

c++ - 双向链表无限循环?

java - 如何从Java中的双向链表中随机删除任何节点?

java - 无法转换 android.app.fragment

java - Spring 3.1 和 Hibernate 4 : "HibernateException: No Session found for current thread" When calling DAO method from unit test

java - Eclipse:为什么无法识别手动创建的类?

c++ - 如何在链表中搜索结构对象

c - 打印内容后如何从链表中删除节点?

c - 我正在创建一个函数来直接在 C 中创建节点。但是,我不知道如何实现节点的命名部分

c++ - 复制构造函数双向链表中的段错误