单链表:使用 while 循环搜索列表时出现空指针异常

Single Linked List: Null Pointer Exception when searching through list with while loop

我在尝试开始工作时遇到了这种方法的问题。我的任务是删除元素的第一次出现。当列表中有要删除的元素时,它工作正常。但是如果我搜索一个不在列表中的元素,它会在我的 while 循环中抛出一个空指针异常。 似乎找不到问题,我希望循环在找到元素或 temp.next == null(也就是列表末尾)之后停止。 有人能给我指出正确的方向吗?

public void deleteFirstOccurance(int data)      
{
    Node temp = head;
    boolean foundElement = false;

    if(head==null)                              //Sjekker om listen inneholder elementer
    {
        System.out.println("There are no elements in list");

    }
    else
    {
        if(temp.element==data) //Sjekker første node
        {
            head = temp.next;
            System.out.println(temp.element+" is deleted");
            elementCount--;
            foundElement = true;
        }
        else
        {
            while(temp.next != null || temp.next.element != data)   //Leter fra node sin next frem til den finner data eller treffer null
            {
                temp = temp.next;
            }
            if(temp.next.element == data)
            {
                System.out.println(temp.next.element+" is deleted");
                temp.next= temp.next.next;
                elementCount--;
                foundElement = true;
            }

        }
    }
    if(!foundElement)
        System.out.println("No elements found");
}//Oppgave3

抛出异常,因为在检查 temp.next 是否为 null 之前,您正在获取 temp.next.element 的值。

while 循环结束后同样的事情:你有 if (temp.next.element == data)temp.next 可能是 null。此时它要么是下一个元素就是你要找的那个,要么是null。所以检查 if (temp.next != null) 就足够了。

条件也应该有 &&,而不是 ||:你想 继续 循环,而你有下一个元素 并且这个元素不是你要找的。

因此,要解决这些问题,请将 while(temp.next.element != data || temp.next != null) 替换为 while (temp.next != null && temp.next.element != data),并将 while 循环后的 if (temp.next.element == data) 替换为 if (temp.next != null)