【发布时间】:2011-11-15 08:57:47
【问题描述】:
我正在编写一个 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 出现的位置。我已经这样做了。它出现在while 循环的第二次迭代中的reversedLinkedList = reversedLinkedList.getNext(); 行中。
我用 8 个指针初始化了链表以进行测试。 while 循环没有转到第二个节点,而是看到一个 null 指针。它可能与 temp 变量有关,但我不确定。
【问题讨论】:
-
如果你在调试器中运行它,它应该会停止在异常的线上,给你很多线索。
-
正如 Oli 指出的那样,您应该得到一个特定的行来告诉您异常发生的位置。通过浏览它,确保(如果列表是单链接的)您在切换节点之前没有取消引用节点 - 这只会清除列表(head 除外)。
-
异常堆栈跟踪也应该如此。 ;)
-
有些人建议我使用调试器来确定发生空异常的位置。我已经这样做了。它出现在“reversedLinkedList = reversedLinkedList.getNext();”行中在 while 循环的第二次迭代中,我用 8 个指针初始化了链表以进行测试。 while 循环没有转到第二个节点,而是看到一个空指针。它可能与 temp 变量有关,但我不确定。
标签: java linked-list nullpointerexception singly-linked-list