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

如何在两个虚拟节点之间的双向链表的开头添加节点?

俞子实
2023-03-14

我正在尝试编写一个函数addFirst(),它接受一个项目并将其插入双向链表的前端。双向链表有两个虚拟节点,两端各一个。我迄今为止编写的addFirst()方法在迭代列表并打印时只返回两个虚拟节点。我无法弄清楚我的代码有什么问题。

public void addFirst(E item) {
        if (item.equals(null)) { throw new NullPointerException(); }

        Node node = new Node(item, null);
        Node ptr = first;

        ptr.next.prev = node;
        node.prev = ptr;
        node.next = ptr.next;

    }

public static void main(String[] args) {

        Deque<Integer> lst = new Deque<Integer>(); // empty list

        lst.addFirst(1);
        lst.addFirst(2);
        lst.addFirst(3);

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

当我运行main时,我得到的只是:

null空

然而,我预计:

null 3 2 1 null

有谁能告诉我如何修复代码,以便在双链接列表的开头添加一个项目,在两个虚拟的第一个和最后一个节点之间?

共有1个答案

洪楷
2023-03-14

我发现我做错了什么我只需要把线加起来就可以了

ptr。下一个=节点

因此,我对该方法的完整代码如下所示:

public void addFirst(E item) {
if (item.equals(null)) { throw new NullPointerException(); }

        Node node = new Node(item, null);
        Node ptr = first;

        ptr.next.prev = node;
        node.prev = ptr;
        node.next = ptr.next;
        ptr.next = node;

    }

 类似资料:
  • 我正在为一个CS类做一些家庭作业,并且正在努力使用一个函数来反转两个给定节点之间的双链接列表。我对自己做错了什么感到困惑,我在谷歌上搜索过,但找不到任何有帮助的东西。 我有一个双链表,我基本上使用这个函数作为辅助函数,在两个节点之间反转它,这两个节点作为函数的参数。 下面是模板的代码,有注释以便您了解我的思考过程 那么,有什么想法吗?我已经知道问题发生在哪里,是什么,但是我还不知道为什么会发生,以

  • 大家好,我正在尝试在两个双链接列表之间完全交换两个节点(值和地址也是)。只有位于相同位置的节点才能在两个节点之间交换,即位置2的节点只能由另一个LinkedList中位置2的节点交换。考虑下面的2个链接列表示例: 假设我们想交换第三个元素,即162和830。交换后,领英列表变成: 我已经尝试了下面的代码,但它不能替换前面的元素。 我怎样才能完成这项任务? elseif不交换前面的元素,例如,如果我

  • 我在课堂上有一个关于Java的作业。它是关于雇员的,所以有三个类,雇员,雇员列表和节点。我需要用这个做一个双链接列表。链表是我们定制的类,而不是Java提供的类。 现在我被困在添加(雇员)方法中。该方法输入参数一个雇员对象,并被要求添加到列表的末尾。 这是密码 简单地说,当列表为空时,该方法会将员工完美地添加到节点中,即使我将第二个员工添加到列表中,也没有问题;但当我再添加,并尝试检索它时,我最终

  • 我写了下面的代码,但它在执行create()函数后停止工作。我想从头节点开始删除替代元素。我的delete_Alt()函数正确吗?请告诉我哪里错了。

  • 类MyList的公共方法TwoTogethere()返回True,当且仅当list有两个相等的相邻元素。您可以假定没有列表元素(数据)为空。以下是一些示例:当调用此方法时,列表[a,b,c,d]将返回false。而是一个清单[a、b、b、c]或[a、b、c、d、e、f、f]。方法返回true。编写public方法。您可以使用列表接口引用(字段:data、prev、next)(head、tail)(