当前位置: 首页 > news >正文

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

📌 难度:简单
📚 标签:链表、双指针、迭代、递归
🔗 题目链接(LeetCode CN)


🧩 一、题目描述

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

✅ 示例:

输入:

head = [1,2,3,4,5]

输出:

[5,4,3,2,1]

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

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

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = next

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

ListNode(1) → ListNode(2) → ListNode(3) → None

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

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

📌 用到三个指针:

指针含义
cur当前正在处理的节点
pre当前节点的前一个节点(反转部分的头)
tmp临时保存 cur.next,防止链断

📊 四、图解执行流程

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

初始状态:

pre = None
cur = 1

第一步:

tmp = cur.next  # tmp = 2
cur.next = pre  # 1 → None
pre = cur       # pre = 1
cur = tmp       # cur = 2

第二步:

tmp = 3
2 → 1 → None
pre = 2
cur = 3

第三步:

tmp = None
3 → 2 → 1 → None
cur = None,结束

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


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

# Definition for singly-linked list.
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextfrom typing import Optionalclass Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:cur = headpre = Nonewhile cur:tmp = cur.next       # 1. 暂存下一个节点cur.next = pre       # 2. 当前节点指向前一个pre = cur            # 3. pre 向前移动cur = tmp            # 4. cur 向前移动return pre

🧯 六、常见错误总结

错误描述原因
cur.next = cur会造成死循环,指针指向自己
忘记保存 cur.next链表断链,后面访问不到
最后返回 curcur 最后是 None,应返回 pre

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

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

class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:if head is None or head.next is None:return headnew_head = self.reverseList(head.next)head.next.next = headhead.next = Nonereturn new_head

📚 八、总结与面试建议

  • 链表题是面试经典,考察指针操作能力

  • 本题是链表反转的基础,后续可拓展到:

    • 反转链表前 N 个节点
    • 反转部分链表(区间 [m, n])
    • k 个一组反转链表

✨ 九、推荐练习题

  1. 92. 反转链表 II
  2. 25. K 个一组翻转链表
  3. 234. 回文链表

📌 如果你觉得这篇文章对你有帮助,欢迎点赞 👍、收藏 ⭐、评论 💬 支持我!

http://www.xdnf.cn/news/378109.html

相关文章:

  • 洛谷P7528 [USACO21OPEN] Portals G
  • Android开发-Activity启停
  • Halcon之计算抓取螺母的位姿
  • 《Python星球日记》 第54天:卷积神经网络进阶
  • Python 核心概念速查清单
  • LeetCode --- 448 周赛
  • Java Bean容器详解:核心功能与最佳使用实践
  • 自动泊车技术—相机模型
  • OSPF综合实验报告
  • SpringCloud之Ribbon基础认识-服务负载均衡
  • vue3 无缝列表循环
  • 深圳SMT贴片加工厂制造流程解析
  • PaddleOCR本地部署
  • 【Linux系统调试】内存错误检测工具AddressSanitizer (ASan)
  • 基于协同过滤的音乐推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
  • Duplicati:一款跨平台的备份客户端,支持加密、增量、压缩的备份存储在云存储服务和远程文件服务器
  • VBA即用型代码手册:字体Font与插入Insert
  • 卡尔曼滤波算法简介与 Kotlin 实现
  • en_text_100_words
  • leetcode504.七进制数
  • 联邦学习图像分类实战:基于FATE与PyTorch的隐私保护机器学习系统构建指南
  • cadence -- allegro汉化
  • UE5 PCG学习笔记
  • C++笔记-set和map的使用(包含multiset和multimap的讲解)
  • Spring boot 简单开发接口
  • 2025年全新 GPT 4.5 AI 大模型 国内免费调用
  • 缓存理论到实战:技术选型与七层架构设计
  • 工厂节能新路径:精准节能的深度剖析
  • LabVIEW多通道并行数据存储系统
  • [C++] 大数减/除法