链接列表反向函数在java中

时间:2016-04-17 08:11:09

标签: java data-structures linked-list reverse

我是编程新手,所以任何人都可以解释下面的代码是如何工作的吗?

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循环中发生了什么。

提前致谢。

2 个答案:

答案 0 :(得分:1)

基本上它会尝试撤消链接列表并且您可能知道,每个Node都有两个指针:nextprev。为了反转链表,我们应该以下图中的方式更改这些指针(我们要将蓝色链变为红色链)

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

enter image description here

答案 1 :(得分:0)

对于列表中的每个节点,它正在将下一个指针更改为指向上一个节点。

例如。这是链接列表:

A-&GT; B-&以及c

并将其更改为:

A&LT; -b&LT; -c