【发布时间】:2019-08-21 06:02:23
【问题描述】:
我有一个完整的工作方法来反转一个双向链表。老实说,几个月来我一直在回去和第四次尝试跟踪这段代码以确切了解它是如何工作的,但是当我用 current.prev 更新当前节点时,我在 while 结束时感到困惑
我尝试在每次更改下一个和前一个指针时打印出节点的值,但是我得到一个空指针异常,所以那里没有运气。
public void reverse(){
Node temp = null;
Node current = head;
while(current != null){
temp = current.prev;
current.prev = current.next;
current.next = temp;
current = current.prev;
}
if(temp != null){
head = temp.prev;
}
}
这里没有错误,我通过我自己的测试用例来测试最坏和最好的情况。我似乎无法理解发生了什么。我知道这实际上是在交换 next 和 prev 指针,但我需要知道如何。
【问题讨论】:
-
那么,你的问题是 NullPointerException 吗?考虑到抛出异常,说“这里没有错误”并不是真的。
-
你知道如何使用你的 IDE 的调试器吗?
-
因此,如果我尝试使用 System.out.print() 进行跟踪,则会引发此异常,因为在某些时候该值为 null 并且不允许我打印它们。否则,如果我尝试类似 node.next.next.next 或 node.prev.prev.prev 之类的东西,它告诉我该列表是一个双向链表,并且在反转它时不会丢失节点。
-
不,我不知道,我对使用 VSCode 很陌生
-
那么今天是学习的好日子。您的调试器允许您逐行执行程序,并查看每个变量在每个点的值。它非常适合这种情况。如果您要成为一名专业程序员,您的调试器将在您的职业生涯中为您节省数年的时间。
标签: java data-structures linked-list doubly-linked-list