我正在编写一个Java函数来就地反转链表。我是Java的新手,无法成功调试下面函数中的错误。 IDE返回 NullPointerException ,我似乎无法弄清楚。任何帮助将不胜感激。
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 变量有关,但我不确定。
答案 0 :(得分:3)
你的推理存在缺陷。当你(第一步)
reversedLinkedList.setNext(temp)
您正在将第一个引用更改为null(这是正确的),但是您松开了对下一个指针的任何引用。两行后你
reversedLinkedList = reversedLinkedList.getNext();
temp
为空,因此reversedLinkedList
将为空。
在更改之前,您需要存储指向临时变量的下一个指针。
但这不会导致异常。请发布完整代码和异常的堆栈跟踪
答案 1 :(得分:1)
我会建议你;
这里没有任何代码可以产生空指针异常,所以我假设你看错了地方。我建议你按照上面的两个步骤而不是猜测。
答案 2 :(得分:-1)
问题可能出在最后一个节点上,因为它的NULL,你将无法获得下一个节点!
reversedLinkedList = reversedLinkedList.getNext();
虽然不确定!