反向链接列表 - 空指针异常

时间:2011-11-15 08:57:48

标签: 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) {
        reversedLinkedList.setNext(temp);
        temp = reversedLinkedList;
        reversedLinkedList = reversedLinkedList.getNext();    
    }
    return reversedLinkedList;
}

为了进行测试,我有一个初始化的链表,已经有8个链接节点。在上面的函数中,我试图交换每个节点之间的下一个指针,并沿链表移动reversedLinkedList指针。

编辑:有人建议我使用调试器来识别NullPointerException发生的位置。我已经这样做了。它出现在reversedLinkedList = reversedLinkedList.getNext();循环的第二次迭代中的行while中。

我用8个指针初始化链表进行测试。 while循环而不是转到第二个节点,而是看到null指针。它可能与 temp 变量有关,但我不确定。

3 个答案:

答案 0 :(得分:3)

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

reversedLinkedList.setNext(temp)

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

reversedLinkedList = reversedLinkedList.getNext();

temp为空,因此reversedLinkedList将为空。

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

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

答案 1 :(得分:1)

我会建议你;

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

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

答案 2 :(得分:-1)

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

 reversedLinkedList = reversedLinkedList.getNext();

虽然不确定!