在不创建新列表的情况下在Java中反转双向链表

时间:2015-02-10 08:12:02

标签: java pointers reverse doubly-linked-list

我正在尝试在Java中反转一个双向链表,似乎无法弄清楚为什么我会收到NullPointer错误。我知道这里还有其他问题涉及同一主题,例如

Reversing a Doubly Linked List

Reversing a 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)

0 个答案:

没有答案