我是编程新手,所以任何人都可以解释下面的代码是如何工作的吗?
Node reverse(Node node) {
Node prev = null;
Node current = node;
Node next = null;
while (current != null) {
next = current.next;
current.next = prev;
prev = current;
current = next;
}
node = prev;
return node;
}
我只想知道while循环中发生了什么。
提前致谢。
答案 0 :(得分:1)
基本上它会尝试撤消链接列表并且您可能知道,每个Node
都有两个指针:next
和prev
。为了反转链表,我们应该以下图中的方式更改这些指针(我们要将蓝色链变为红色链)
http://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/progname.c#n51
因此,例如在图片中设想Node 3
,其prev
字段指向的内容(Node 2
)将成为Node 3
的下一个节点(在我们想要的红色链),所以current.next = prev;
(第2行)是有道理的。但是因为我们希望在循环的下一次迭代中到达Node 4
,在此之前我们编写next = current.next;
(第1行)来保存Node 3
的下一个指针,当前< / strong>指向Node 4
,最后在每次迭代结束时,我们将current = next;
(第4行)放回到迭代到下一个Node
。
在下一次迭代中,我们需要做同样的事情,所以现在prev
应指向Node 3
,这就是为什么我们有prev = current;
(第3行)来准备prev
。
答案 1 :(得分:0)
对于列表中的每个节点,它正在将下一个指针更改为指向上一个节点。
例如。这是链接列表:
A-&GT; B-&以及c
并将其更改为:
A&LT; -b&LT; -c