我正在尝试在Java中反转一个双向链表,似乎无法弄清楚为什么我会收到NullPointer错误。我知道这里还有其他问题涉及同一主题,例如
Reversing a Doubly Linked List
和我找到的其他一些人。
我很抱歉这个副本,但我认为我所做的与答案建议的相同,我似乎无法弄清楚为什么我的功能不起作用。
我知道我需要遍历列表并交换下一个和上一个的指针,直到我到达列表的末尾,这将导致列表被反转。
以下是我的功能代码:
public void reverse() {
Node<AnyType> temp = null;
//Start at the beginning of the list
Node<AnyType> current = beginMarker;
//Go until the end of the list is reached
while (current != null)
{
//Update temp to remember what came before the current node
temp = current.prev;
//Then switch the previous and next pointers
current.prev = current.next;
current.next = temp;
//Advance current to point to the next node in the list, which is now
//stored in current.prev
current = current.prev;
}
}
这就是我认为我在做的事情:
创建一个临时变量来保存下一个前一个值的值,当我进行交换时,最初设置为null,因为最后一个节点应该有一个指向null的指针,指向node.next,当前变量保存在哪里我目前在列表中。
然后当current不为null时,所以当我不在列表的末尾时,我将temp变量设置为当前之前的值。然后我交换前一个和下一个的指针,并将当前的新值设置为current.prev
,这应该让我向前移动列表中的一个节点。
然而,我必须在这里找到一些东西。我希望被推向正确的方向。
编辑: 这是我的堆栈跟踪,但它没有在函数中给我一个错误,所以我不确定如何阅读它以找到问题所在
Exception in thread "main" java.lang.NullPointerException
at MyLinkedList$LinkedListIterator.next(MyLinkedList.java:285)
at MyLinkedList.toString(MyLinkedList.java:186)
at java.lang.String.valueOf(String.java:2847)
at java.io.PrintStream.println(PrintStream.java:821)
at MyLinkedList.main(MyLinkedList.java:321)