如何撤消链表?

use*_*235 18 java algorithm linked-list data-structures singly-linked-list

 Node reverse(Node head) {
    Node previous = null;
    Node current = head;
    Node forward;

    while (current != null) {
        forward = current.next;
        current.next = previous;
        previous = current;
        current = forward;
    }

    return previous;
}
Run Code Online (Sandbox Code Playgroud)

究竟是如何扭转名单的呢?我知道它首先将第二个节点设置为forward.然后它说current.next等于一个null节点previous.然后它说previous现在current.最后current成为forward

我似乎无法掌握这一点以及它的逆转方式.有人可以解释这是如何工作的吗?

Aqu*_*irl 39

在此输入图像描述

  • 只有Techlead知道这一点。你怎么知道... (2认同)

izo*_*ica 5

您迭代地反转列表,并且始终使间隔 [head, previous] 中的列表正确反转(因此当前是其链接未正确设置的第一个节点)。在每个步骤中,您都执行以下操作:

  • 您记住当前的下一个节点,以便可以从它继续
  • 您将当前的链接设置为指向上一个,如果您考虑一下,这是正确的方向
  • 您将以前的更改为当前的,因为现在当前的链接也已正确设置
  • 您将第一个未正确设置链接的节点更改为第一步中记住的节点

如果对所有节点都这样做,则可以证明(例如通过归纳法)列表将被正确反转。