如何撤消链表 - 详细解释

Mic*_*ael 2 java algorithm reverse linked-list data-structures

任何人都可以共享代码的链接,解释如何撤消linked list?或者有人可以解释下面的代码片段吗?

我试图绘制/写入它,但仍然没有得到节点如何反转.

public void reverseList() {
   Node reversedPart = null;
   Node current = head;
   while (current != null) {
       Node next = current.next;
       current.next = reversedPart;
       reversedPart = current;
       current = next;
   }
   head = reversedPart;
}
Run Code Online (Sandbox Code Playgroud)

Ole*_*hov 6

我们来看一个简单的例子:

1 > 2 > 3 > 4 > 5 > null - our list

Before the while loop: node = 1, head = null

While moving over the list:

1:                 1 > null; node = 1, head = null, node.next = head, head = node

2:             2 > 1 > null; node = 2, head = 1,    node.next = head, head = node

3:         3 > 2 > 1 > null; node = 3, head = 2,    node.next = head, head = node

4:     4 > 3 > 2 > 1 > null; node = 4, head = 3,    node.next = head, head = node

5: 5 > 4 > 3 > 2 > 1 > null; node = 5, head = 4,    node.next = head, head = node
Run Code Online (Sandbox Code Playgroud)

注释代表算法的第一步:

public Node reverseList(Node head) {
    Node focusNode = head;          // focusNode = 1
    head = null;
    while (focusNode != null) {
      Node parent = focusNode;      // parent = 1
      focusNode = focusNode.next;   // focusNode = 2; moving over the list...
      parent.next = head;           // parent.next = null (1 -> null)
      head = parent;                // head = 1
    }
    return head;
}
Run Code Online (Sandbox Code Playgroud)