【LeetCode HOT100】206. 反转链表

加载中... 浏览

题目

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

反转链表示意图

提示

一句话思路:遍历链表,逐个把当前节点的 next 指向前一个节点,同时用临时变量保存后继节点

  • 需要三个指针:cur 当前节点、pre 已反转部分的新头(当前节点的前一个)、tmp 暂存后继节点。
  • 关键步骤顺序:先 tmp 保存 cur.next(不然改了 next 就找不到后面了),再让 cur.next 指向 pre,然后 precur 各自前进。
  • 循环结束后 pre 就是原链表的尾节点,即反转后的新头。
  • 一次遍历 O(n),空间 O(1)。

答案

python
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        cur, pre = head, None       # cur 当前节点,pre 已反转部分的新头(初始为 None)
        while cur:                  # 当前节点不为空就继续
            tmp = cur.next          # 暂存后继节点 cur.next,避免丢失
            cur.next = pre          # 修改 next 引用指向,指向已反转部分
            pre = cur               # pre 前进到当前节点(成为新的已反转头)
            cur = tmp               # cur 访问下一节点
        return pre                  # 循环结束,pre 即反转后的链表头

留言板

加载评论中...
【LeetCode HOT100】160. 相交链表
【LeetCode HOT100】21. 合并两个有序链表
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1