单链表:使用 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)
我在尝试开始工作时遇到了这种方法的问题。我的任务是删除元素的第一次出现。当列表中有要删除的元素时,它工作正常。但是如果我搜索一个不在列表中的元素,它会在我的 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)