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

删除双链接列表中的第一个节点

祝嘉懿
2023-03-14

以下代码删除双链接列表中的第一个节点。

public Node deleteFirst()
    {
        Node temp = first;

        if(first.next==null)
            last = null;
        else
            first.next.previous = null;
            first = first.next;

        return temp;
    }

如果列表只包含1个元素,我们将last的引用设置为null。我的问题是,我们为什么不将first的引用设置为null?这会有什么不同吗?

共有2个答案

栾钟展
2023-03-14

除了缺少括号外,这种方法还有几个问题。

public Node deleteFirst()
    {
        Node temp = first;

        if (first != null) { // list might be empty
            if(first.next==null) {
                last = null;
                first = null; // you must remove the first element if it's the 
                              // only one, otherwise the next call to deleteFirst
                              // will return the same Node again
            } else {
                first.next.previous = null;
                first = first.next;
            }
        }
        return temp;

    }
鲜于子琪
2023-03-14

你的括号不见了

此语句将在任何情况下执行,因为它在if/ther之外

first = first.next;

这不是蟒蛇

else {
   first.next.previous = null;
   first = first.next;
}
 类似资料:
  • 我有麻烦删除双向链表中的节点,程序崩溃,我不能解决这个问题。你能帮我吗?这是创建新节点,查看它们并删除它们的完整代码。 我认为这个问题与Node del的scanf()有关,但我不确定。当我只是通过或

  • 问题内容: 我正在练习使用链表节点,遇到了一个我不知道如何回答的问题。如何删除链接列表中的最后一个节点。下面的代码适用于所有条目的最后一个节点。最后一个不会被删除。 节点类别 主要 问题答案: 我想您的最后一个元素失败了。最后一个元素将没有元素。因此,不会将最后一个元素与传递的字符串进行比较。您应该使用调试器进行跟踪。

  • 这是我的remove函数,用于删除具有元素的节点。我得到了一个seg错误,我很确定这是因为temp->prev是前面的哨兵,所以从技术上来说,它不在双链表中。如果这是正确的,我实际上如何防止这种情况?如有任何帮助,不胜感激。 编辑:刚刚更新了代码,但仍然出现了Seg错误

  • 我正在为我的Data Structures类编写一个项目,该项目要求我编写一个类来实现INT的链接列表。 为节点使用内部类 包括以下方法 编写一个测试程序,使您能够以任意顺序使用所需的任何数据测试所有方法 我必须创建一个名为“public int deleteFromFront()”的方法。此方法旨在“删除列表前面的节点,并返回其中的int,如果列表为空,则返回null。”下面是我的代码。然而,当

  • 我有一个头和lastNode的参考。嗨我有个问题。当我删除双向链表中的最后一个节点时,我必须将该节点的前一个引用设置为空,或者我可以离开它。我在删除lastNode时做了这样的事情。 当我使用toString方法时,它会按预期打印。只是想知道是否有必要将旧的last node prev设置为null。或者垃圾收集器只是删除它,因为没有对它的引用,即使旧节点仍然有对链接列表中某个节点的引用

  • 我试图从基于阉羊的双链表中删除一个元素,该列表中的节点满足返回bool的函数。由于某种原因,替换节点的前一个指针(下一个被删除)不更新,而是引用回它自己。 我的代码 测试结果