遍历双向链表时如何跳过空虚拟节点

How to skip null dummy nodes when traversing doubly linked lists

我有一个双向链表,如下所示:

null 1 2 3 null

当我使用带有以下代码的迭代器遍历列表时,输出打印出上面写的内容。

            Iterator<Integer> it = lst.iterator(); // tests iterator method
            while (it.hasNext()) {
              Integer val = it.next();

              System.out.println(val);
            }

但是,我想在遍历列表时跳过空节点,以便只打印:

1 2 3

我无法让我的代码执行此操作。这是我到目前为止的想法。

            Iterator<Integer> it = lst.iterator(); // tests iterator method
            while (it.hasNext()) {
              Integer val = it.next();
              if (val == null)
                 it.next()

              System.out.println(val);
            }

问题是我收到了 NoSuchElementException 错误,但我不知道如何修复它。我的猜测是我得到了那个错误,因为当我到达第二个空虚拟节点时,我试图跳过它,但是没有其他节点可以跳转到。

我的问题是,如何更改我的代码,以便在跳过两个空虚拟节点的同时打印双向链表中的每个元素?

您所要做的就是将测试与 println 结合使用:

while (it.hasNext()) {
   Integer val = it.next();
   if (val != null){
       System.out.println(val);
   }
}

如果您在循环中执行额外的 next,则会跳过 hasNext,这就是您 运行 进入异常的原因。