LC 206链表简单第 26 / 95 题

反转链表

Reverse Linked List

链表迭代递归
本机进度仅保存在当前浏览器

题目描述

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

示例:1 -> 2 -> 3 -> 4 -> 5 反转后为 5 -> 4 -> 3 -> 2 -> 1。

解题思路

  1. 迭代版用三个指针:prev(已反转部分的头)、curr(待处理节点)、next(暂存后继)。
  2. 每步先把 next 存下来,再让 curr 指回 prev,然后三个指针整体右移一格。
  3. 循环结束时 curr 为空,prev 即新头节点;全程只改指针域,空间 O(1)。
  4. 递归版先递归到尾部,回溯时让 head 的下一个节点指回 head,注意要把 head.next 置空防止成环。

参考实现

查看参考实现Python · 建议先自行作答
def reverseList(head):
    # 迭代:逐个把节点头插到 prev 链上
    prev = None
    while head:
        nxt = head.next
        head.next = prev
        prev = head
        head = nxt
    return prev

复杂度与归属

时间复杂度O(n)
空间复杂度O(1)
所属分类链表
题源LeetCode 206

关联教程

返回题图鉴