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

时间:2015-01-28 15:06:04

标签: list while-loop nullpointerexception linked-list nodes

我试图开始工作时遇到这种方法的麻烦。我的任务是删除元素的第一次出现。当列表中有要删除的元素时,它可以正常工作。但是如果我搜索一个不在列表中的元素,它会在我的while循环中抛出一个nullpointer异常。 似乎无法找到问题,我希望循环停止:找到元素或当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

1 个答案:

答案 0 :(得分:0)

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

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),并在if (temp.next.element == data)循环后用while替换if (temp.next != null)