Java 反向链接列表-空指针异常
我正在编写一个Java函数来反转一个链接列表。我是Java新手,未能成功调试下面函数中的错误。IDE返回一个我似乎无法理解的NullPointerException。任何帮助都将不胜感激Java 反向链接列表-空指针异常,java,linked-list,nullpointerexception,singly-linked-list,Java,Linked List,Nullpointerexception,Singly Linked List,我正在编写一个Java函数来反转一个链接列表。我是Java新手,未能成功调试下面函数中的错误。IDE返回一个我似乎无法理解的NullPointerException。任何帮助都将不胜感激 public listNode reverseLinkedList(listNode head) { listNode reversedLinkedList = head; listNode temp = null; while (reversedLinkedList != null)
public listNode reverseLinkedList(listNode head)
{
listNode reversedLinkedList = head;
listNode temp = null;
while (reversedLinkedList != null) {
reversedLinkedList.setNext(temp);
temp = reversedLinkedList;
reversedLinkedList = reversedLinkedList.getNext();
}
return reversedLinkedList;
}
为了进行测试,我已经初始化了一个链接列表,其中包含8个链接节点。在上面的函数中,我尝试在每个节点之间交换下一个指针,并沿链接列表移动reversedLinkedList
指针
编辑:有些人建议我使用调试器来识别NullPointerException
发生的位置。我已经做到了。它出现在行reversedLinkedList=reversedLinkedList.getNext()中代码>在while
循环的第二次迭代中
我用8个指针初始化了链表以进行测试。while
循环没有转到第二个节点,而是看到一个null
指针。它可能与temp变量有关,但我不确定 我建议你
- 阅读错误消息以查找发生NullPointerException的确切行
- 使用调试器逐步检查代码并查看变量为null的原因
这里没有任何代码可以生成空指针异常,因此我假设您在错误的位置查找。我建议你按照上面的两个步骤去做,而不是猜测
- 阅读错误消息以查找发生NullPointerException的确切行
- 使用调试器逐步检查代码并查看变量为null的原因
这里没有任何代码可以生成空指针异常,因此我假设您在错误的位置查找。我建议您按照以上两个步骤操作,而不是猜测。问题可能在于最后一个节点,您将无法获取下一个节点,因为它为空
reversedLinkedList = reversedLinkedList.getNext();
不过不确定 问题可能出在最后一个节点上,您将无法获取下一个节点,因为它为空
reversedLinkedList = reversedLinkedList.getNext();
不过不确定 你的推理有缺陷。当你(第一步)
您正在将第一个引用更改为null(这是正确的),但是您丢失了对下一个指针的任何引用。两行之后你
reversedLinkedList = reversedLinkedList.getNext();
temp
为空,因此reversedLinkedList
将为空
在更改临时变量之前,需要存储指向临时变量的下一个指针
但这并没有导致异常。请发布完整的代码和异常的堆栈跟踪您的推理存在缺陷。当你(第一步)
您正在将第一个引用更改为null(这是正确的),但是您丢失了对下一个指针的任何引用。两行之后你
reversedLinkedList = reversedLinkedList.getNext();
temp
为空,因此reversedLinkedList
将为空
在更改临时变量之前,需要存储指向临时变量的下一个指针
但这并没有导致异常。请发布完整的代码和异常的堆栈跟踪如果您在调试器中运行它,它应该会在出现异常的行上停止,为您提供大量线索。正如Oli所指出的,您应该会得到一条特定的行,告诉您异常发生的位置。通过浏览列表,确保(如果列表是单链接的)在切换其指针之前没有取消引用节点——这只会清除列表(头除外)。异常堆栈跟踪也应该如此。;)有人建议我使用调试器来识别nullexception发生的位置。我已经做到了。它出现在while循环第二次迭代的行“reversedLinkedList=reversedLinkedList.getNext();”中,我用8个指针初始化了链表以进行测试。while循环没有转到第二个节点,而是看到一个空指针。它可能与temp变量有关,但我不确定。如果在调试器中运行它,它应该会在出现异常的行上停止,这给了您很多线索。正如Oli所指出的,您应该得到一个特定的行,告诉您异常发生的位置。通过浏览列表,确保(如果列表是单链接的)在切换其指针之前没有取消引用节点——这只会清除列表(头除外)。异常堆栈跟踪也应该如此。;)有人建议我使用调试器来识别nullexception发生的位置。我已经做到了。它出现在while循环第二次迭代的行“reversedLinkedList=reversedLinkedList.getNext();”中,我用8个指针初始化了链表以进行测试。while循环没有转到第二个节点,而是看到一个空指针。它可能与temp变量有关,但我不确定。不,这不会引发异常:reversedLinkedList
将为null不,这不会引发异常:reversedLinkedList
将为null我明白了。谢谢最后是一个小错误。难以置信我错过了它我认为这是导致异常的原因,因为在下一次迭代中reversedLinkedList.setNext(temp)代码>被执行。由于reversedLinkedList
如您所述被设置为null
。@BenvanGompel不应该这样做,因为循环由reversedLinkedList!=空
。这就是为什么我说这段代码很可能不会导致异常。@Matteo,是的,你是对的。错过了,我明白了。谢谢最后是一个小错误。难以置信我错过了它我认为这是导致异常的原因,因为在下一次迭代中reversedLinkedList.setNext(temp)代码>被执行。由于reversedLinkedList
如您所述被设置为null
。@BenvanGompel不应该这样做,因为循环由reversedLinkedList!=空
。这就是为什么我说这段代码很可能不会导致异常。@Matteo,是的,你是对的。错过了。