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

在Java中删除单向链接列表的节点

穆阳炎
2023-03-14

在Java中,从单链接列表中删除节点时遇到问题。我有一个列表,其中包含整数的数据,我需要删除所有节点,它们的值可以被四除。我还需要移动head和tail指针,以防head或tail元素被删除。我为此编写了一个方法,大多数时候,它的工作方式和我需要的一样,但有时它会抛出NullPointerException。我怎样才能修好它?这是我的密码:

public void delete(){
            Node temp = head, prev = null;
     
            if (temp != null && temp.data % 4 == 0) 
            {
                head = temp.next;
                temp = head;
            }

            while (temp.next != null) 
            {
               if (temp.data % 4 != 0) {
                   prev = temp;
                   temp = temp.next;
               }
               else {
               prev.next = temp.next;
                temp = prev.next;
               }
            }
            if (tail.data % 4 == 0) {
                tail = prev;
                tail.next = null;
                
            }
        }

共有2个答案

彭宏义
2023-03-14

在你的而条件添加一个空检查:

while(null!=temp

池麒
2023-03-14

而(temp.next!=null):temp可能为空。还有一些小问题。

这是因为太复杂了。

    public void delete() {
        Node prev = null;
        for (Node temp = head; temp != null; temp = temp.next) {
           if (temp.data % 4 == 0) {
               if (prev == null) {
                   head = temp.next;
               } else {
                   prev.next = temp.next;
               }
           } else {
               prev = temp;
           }
        }
        tail = prev;
    }
  • 上述操作将prev设置为有效的上一个节点
  • 删除考虑从head或prev中删除。下一个
  • 尾部更新为最后一个元素
 类似资料:
  • 我有麻烦删除双向链表中的节点,程序崩溃,我不能解决这个问题。你能帮我吗?这是创建新节点,查看它们并删除它们的完整代码。 我认为这个问题与Node del的scanf()有关,但我不确定。当我只是通过或

  • 以下代码删除双链接列表中的第一个节点。 如果列表只包含1个元素,我们将last的引用设置为null。我的问题是,我们为什么不将first的引用设置为null?这会有什么不同吗?

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

  • 我正在学习数据结构,并试图理解Java中的链接列表。我的问题是,我有麻烦与删除节点在给定的索引递归。我的目标是得到O(log n),而不是使用循环,最后得到O(n)。 因此,当我试图删除索引2的条目时,它会删除该索引之前的所有数字,但不会删除该索引-因此它会删除[0]和[1],但不会删除[2]。 例如,在此代码中,删除前的数组填充为:。调用后,它有以下条目: 我只想删除13,这样数组就会像这样:

  • 公共类LinkedList11{//私有内部类节点 }