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)