Skip to content

链表的反转操作是基本的链表操作之一。

快速记忆:

需要一个反转后的链表指针prev(用来返回最后的反转链表)
需要一个当前的链表指针curr

循环当前的链表curr,直到循环到终点

需要一个临时的指针,存储当前节点curr的下一个节点temp 将当前的节点的next指针指向prev prev指向curr curr指向temp

Java

public ListNode reverseList(ListNode head) {
  ListNode curr = head;
  ListNode prev = null;
  while (curr != null) {
    ListNode temp = curr.next;
    curr.next = prev;
    prev = curr;
    curr = temp;
  }
  return prev;
}

为什么要上面这些步骤?

因为反转链表会调整next指针的方向,所以需要一个额外的prev存储反转后的链表

  • 为什么要一个临时的temp?
    因为curr的next指针调整之后,curr就丢失了信息,找不到下一个节点了,所以要存一下

  • 为什么要prev指向curr

因为原链表和反转后的链表,要一个一个节点的处理,所以要调整指针的移动