如何反向链表-详细解释



谁能分享一个链接到代码,解释如何逆转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;
}

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

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

注释表示算法的第一步:

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;
}

首先,应该避免在while循环中使用Node next,以消除任何类型的混淆。您最好将next重命名为nodeNext,并在while循环之外声明Node nodeNext,并且仅使用nodeNext = current.next;来解决任何混淆。我想这就是你困惑的原因。

这段代码是怎么做的,它是反转每个节点的链接方向。

每个节点的下一个节点方向被反转。第一个节点指向第二个节点的方向(原来是在第一个节点前面的节点)颠倒了,第一个节点指向它的前身,在它前面的节点指向第一个节点。

这一直重复到最后一个节点,即current!=null。在此之后,只要current变为null,循环就不再迭代,所有元素都被反转。

相关内容

  • 没有找到相关文章

最新更新