遍历双向链表时如何跳过空虚拟节点
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,这就是您 运行 进入异常的原因。
我有一个双向链表,如下所示:
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,这就是您 运行 进入异常的原因。