微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中删除单向链表的节点

如何解决Java中删除单向链表的节点

我在从 Java 单链表中删除节点时遇到问题。我有一个列表,其中包含整数数据,我需要删除所有节点,其值可以除以除以四。我还需要移动头指针和尾指针,以防头或尾元素被删除。我为此编写了方法,大部分时间它都按照我的需要工作,但有时它会抛出 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;
                
            }
        }

解决方法

while (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 设置为 valid 上一个节点。
  • 删除考虑从 head 或 prev.next 删除。
  • tail 更新到最后一个元素。
,

在你的 while 条件中再添加一个空检查:

while (null != temp && null != temp.next)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。