0

我正在编写一个 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变量有关,但我不确定。

4

3 回答 3

3

你的推理有缺陷。当你(第一步)

reversedLinkedList.setNext(temp)

您正在更改对 null 的第一个引用(这是正确的),但您丢失了对下一个指针的任何引用。两行之后你

reversedLinkedList = reversedLinkedList.getNext();

temp为空,所以reversedLinkedList将为空。

在更改临时变量之前,您需要存储指向临时变量的 next 指针。

但这不会导致异常。请发布完整的代码异常的堆栈跟踪

于 2011-11-15T09:05:44.143 回答
1

我会建议你;

  • 阅读错误消息以找到发生 NullPointerException 的确切行。
  • 使用调试器单步执行代码并查看变量为空的原因。

这里没有任何代码可以产生空指针异常,所以我假设你找错地方了。我建议你按照上面的两个步骤而不是猜测。

于 2011-11-15T09:02:29.853 回答
-1

问题可能出在最后一个节点上,您将无法获得下一个节点,因为它为 NULL!

 reversedLinkedList = reversedLinkedList.getNext();

虽然不确定!

于 2011-11-15T09:02:38.193 回答