当前位置: 首页 > 知识库问答 >
问题:

如何在遍历双链表时跳过空伪节点

王经赋
2023-03-14

我有一个双链接列表,看起来像:

null 1 2 3 null

当我使用迭代器和下面的代码遍历列表时,输出会精确打印上面写的内容。

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

              System.out.println(val);
            }

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

13

我无法让我的代码做到这一点。这是我迄今为止所想出的。

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

              System.out.println(val);
            }

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

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

共有1个答案

邓英卓
2023-03-14

你所要做的就是结合println使用测试

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

如果在循环中执行额外的Next,则跳过一个hasNext,这就是为什么会遇到异常。

 类似资料:
  • 由于双链表有两个虚拟节点,一个是头部,另一个是尾部。我可以通过,但我不知道如何传递虚拟头节点并继续遍历以下节点。

  • 每次我们在堆中为链表分配内存时,我们都会得到一个地址,这个地址链接到链表的下一个变量,head是指向链表初始节点的指针。 如果我们做,那么它会指向下一个链表,或者指向堆的随机内存,或者指向堆中初学者列表的下一个内存。

  • 问题内容: 您好,我正在尝试创建一个遍历链表的for循环。对于每条数据,它将单独列出。我正在尝试在此处学习链接列表,因此请不要提供数组建议。有人知道怎么做吗? 示例输出: 187号航班 501航班 我的代码如下: 问题答案: 只需使用增强的for循环,就像使用数组一样:

  • 嘿,伙计们,我在让for循环工作时遇到了一些麻烦。myList是一个链表,其中填充了文件中的数字,我正在尝试遍历它并以一种(当前,下一个)的方式打印当前值和每个下一个值- 出于某种原因,for循环无法执行任何操作,或者更确切地说,代码在for循环的开始就中断了。如果我摆脱for循环并只是复制和粘贴 很多时候它会按照我的意愿工作,但我宁愿不这样做。for 循环语法看起来是正确的,如果 say cou

  • 我真的很难修复我的代码。我已经创建了一个双链接列表,我正试图反向遍历它。 有什么想法吗? 这是我的代码:Node。爪哇: 下面是第二个类“DNode.java”: 最后,这里是双链接列表。java:(重写另一个类“链表”中的“添加”和“删除”方法) 公共类双链接列表扩展了链接列表{ 我可以向前打印列表,但向后打印时会遇到无限循环。有什么想法吗? 谢谢

  • 我用C语言编写了双重链接列表的代码,它从头到尾的遍历很好,但从尾(end)到头的遍历陷入了无限循环,只打印最后一个节点的数据,我不知道出了什么问题。