前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【LeetCode 热题 100】206. 反转链表

【LeetCode 热题 100】206. 反转链表

作者头像
未名编程
发布于 2025-05-11 12:31:16
发布于 2025-05-11 12:31:16
4900
代码可运行
举报
文章被收录于专栏:PythonPython
运行总次数:0
代码可运行

🧩 一、题目描述

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

✅ 示例:

输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
head = [1,2,3,4,5]

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[5,4,3,2,1]

🔍 二、链表与 Python 列表的区别

很多初学者会误解输入 head = [1,2,3]Python 列表。其实这是题目的简化表示方式,真正传入 reverseList 函数的是链表结构,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

链表在内存中的结构类似这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ListNode(1)ListNode(2)ListNode(3) → None

🧠 三、解题核心思路:三指针迭代法

反转链表的本质是:逐步改变每个节点的 next 指针方向

📌 用到三个指针:

指针

含义

cur

当前正在处理的节点

pre

当前节点的前一个节点(反转部分的头)

tmp

临时保存 cur.next,防止链断


📊 四、图解执行流程

以链表 1 → 2 → 3 → None 为例:

初始状态:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pre = None
cur = 1
第一步:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tmp = cur.next  # tmp = 2
cur.next = pre  # 1 → None
pre = cur       # pre = 1
cur = tmp       # cur = 2
第二步:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tmp = 3
21 → None
pre = 2
cur = 3
第三步:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tmp = None
321 → None
cur = None,结束

最终返回 pre,即新的头节点。


✅ 五、Python 实现代码(迭代)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

from typing import Optional

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur = head
        pre = None
        while cur:
            tmp = cur.next       # 1. 暂存下一个节点
            cur.next = pre       # 2. 当前节点指向前一个
            pre = cur            # 3. pre 向前移动
            cur = tmp            # 4. cur 向前移动
        return pre

🧯 六、常见错误总结

错误描述

原因

cur.next = cur

会造成死循环,指针指向自己

忘记保存 cur.next

链表断链,后面访问不到

最后返回 cur

cur 最后是 None,应返回 pre


🔁 七、递归解法(可选拓展)

虽然迭代更推荐,但你也可以使用递归反转链表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if head is None or head.next is None:
            return head
        new_head = self.reverseList(head.next)
        head.next.next = head
        head.next = None
        return new_head

📚 八、总结与面试建议

  • 链表题是面试经典,考察指针操作能力
  • 本题是链表反转的基础,后续可拓展到:
    • 反转链表前 N 个节点
    • 反转部分链表(区间 [m, n])
    • k 个一组反转链表
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验