206. 反转链表迭代图解

418 阅读1分钟

根据官方题解[迭代]所做的代码图解,帮助小白理解。leetcode - 反转链表题解

题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

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

        return pre;
    }

图解

假设链表为 1 → 2 → 3 → ∅,我们想要把它改成 ∅ ← 1 ← 2 ← 3 。

在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

结合图解看代码和分析:

图解1-2.png

图解3-4.png

  • 时间复杂度: O(n) ,其中 n 是链表的长度。需要遍历链表一次。
  • 空间复杂度: O(1)