LeetCode Hot100(19/100)——206. 反转链表

力扣hot100二刷——链表 第二次刷题不在idea写代码,而是直接在leetcode网站上写,“逼”自己掌握常用的函数。 阅读详情

一、题目描述

给定一个单链表的头节点 head,请将该链表反转,并返回反转后的链表头节点。

示例:

输入:head = [1, 2, 3, 4, 5]
输出:[5, 4, 3, 2, 1]


二、问题本质与考察点

这道题是链表操作的入门题,核心考察的是:

  1. 对链表节点指针的操作理解;
  2. 指针反转逻辑;
  3. 如何用迭代或递归的思维去解决。

三、思维导图

下面是本题的知识结构与思路概览:

反转链表

原理

数据结构:单链表

核心操作:指针翻转

解法类型

迭代法

递归法

分析

n

空间复杂度 O(1) 或 O(n)(递归)

关键难点

指针变化过程理解


四、迭代解法(Iterative Approach)

1. 原理说明

迭代法的思路非常直观:
从链表的头节点开始,逐节点反转它们的 next 指针方向,直到链表末尾。

要使用三个指针变量:

  • prev:指向当前节点的前一个节点(初始为 null)
  • cur:指向当前遍历的节点
  • next:保存当前节点的下一个节点

每一步操作如下:

  1. 保存下一个节点:next = cur.next
  2. 反转指针方向:cur.next = prev
  3. 前移指针:prev = cur
  4. cur 指向下一个节点:cur = next

直到 cur 为空,此时 prev 即为反转后的链表新头节点。


2. 流程图示意

是

否

开始

初始化 prev = null, cur = head

cur != null?

保存 next = cur.next

反转 cur.next = prev

移动 prev = cur

移动 cur = next

返回 prev

结束


3. Java 实现代码

public class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode next = cur.next;
            cur.next = prev;
            prev = cur;
            cur = next;
        }
        return prev;
    }
}

4. 时间与空间复杂度分析

  • 时间复杂度:O(n),其中 n 为链表节点数,每个节点只遍历一次。
  • 空间复杂度:O(1),使用常量级辅助变量,不占额外空间。

五、递归解法(Recursive Approach)

1. 原理说明

递归法的思想是:

  • 将当前节点之后的链表反转;
  • 把当前节点接到反转后的尾部。

递归的关键在于: 反转子链表后,调整指针方向。

假设 head 指向链表头,调用 reverseList(head.next) 得到反转后的子链表 newHead。
再将当前节点 head 接在子链表尾部:

head.next.next = head;
head.next = null;

最后返回 newHead 即可。


2. 时序图说明递归流程

reverseList Main reverseList Main 调用 reverseList(head) 递归到链表末尾 返回反转后的 newHead 调整当前节点指针方向 返回新的头节点

3. Java 实现代码

public class Solution {
    public ListNode reverseList(ListNode head) {
        // 递归终止条件:空链或单节点
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
    }
}

4. 时间与空间复杂度分析

  • 时间复杂度:O(n),每个节点访问一次。
  • 空间复杂度:O(n),递归调用栈深度为链表长度。

六、两种解法对比总结

解法方式思路特点时间复杂度空间复杂度适用场景
迭代法指针循环反转,逻辑清晰且高效O(n)O(1)推荐做法
递归法利用函数栈反转链表,更简洁但占栈空间O(n)O(n)理解递归思维
LeetCode Hot100 刷题笔记(3)—— 链表 一、链表:相交链表,反转链表,回文链表,环形链表,环形链表 II,合并两个有序链表,两数相加,删除链表的倒数第 N 个结点,两两交换链表中的节点,K 个一组翻转链表,随机链表的复制,排序链表,合并 K 个升序链表,LRU 缓存。 *** Trick:本质将链表转为list,再在list上进行操作,最后转回list。 阅读详情

相关推荐

Xilinx Blockset Counter计数器模块使用及参数配置

本文详细介绍了Simulink中Xilinx Blockset库Counter模块的使用以及参数说明。

白码王子小张的博客 1093

力扣Hot100--206.反转链表

反转指针,让 curr(节点1) 的 next指向 prev(None)。反转指针,让 curr(节点2) 的 next指向 prev(节点1)。此时链表状态: (节点3) -> (节点2) -> None,节点1还未被处理,仍指向 节点2。此时链表状态: (节点3) -> (节点2) -> (节点1) -> None。将 curr指针移动到之前保存的下一个节点,即节点2,准备处理下一个节点。保存 curr(节点1) 的下一个节点 (节点2),防止断链。保存 curr(节点2) 的下一个节点 (节点3)。

Lris_kk的博客 1653

视觉定位避坑指南:基于双mark点的坐标转换常见错误排查

本文详细解析了工业视觉项目中基于双mark点的坐标转换常见错误及排查方法,涵盖旋转矩阵构建、坐标系原点选择、图像预处理优化等关键环节。通过实战案例和代码示例,帮助工程师避免定位偏差,提升系统精度,特别适用于自动化检测和精密制造场景。

7z8x2c4v6b9的博客 167

最详细,最简单的力扣(leetcode)hot 100 链表(上)讲解

这篇文章主要是介绍怎么解决hot 100里面关于链表篇章的问题,保证看了都能够学会。

yyyCode的博客 2922

nnDetection复现Luna16 附模型

淘论文发现nnDetection框架对肺结节的检测效果挺好,便跑了跑复现了下, 作者诚不欺人,确实挺好, 并附上我依据文档训练的模型。

HeavenWalker 2595

GXHT40温湿度传感器:I2C通信与CRC校验实战解析

本文详细解析GXHT40温湿度传感器的I2C通信协议与CRC校验机制,涵盖硬件连接、时序控制、数据读取及加热功能应用。通过实战案例分享优化技巧与异常处理,帮助开发者提升嵌入式系统中传感器数据的准确性与可靠性。

rgv234567的博客 240

Leetcode HOT 100 题目总结(已完结)

文章目录前引题目博客链接Easy No.1 - No.21 前引 这段时间感觉动态规划已经做伤了 就是真的没什么动力再做下去了 后面没做的也都是难的不行的dp题目了 想着还是要做的 这段时间换点口味 把力扣HOT 100题给全做了 写个总结 题目博客链接 Easy No.1 - No.21 461. 汉明距离 617. 合并二叉树 104. 二叉树的最大深度 206. 反转链表 169. 多数元素 21. 合并两个有序链表 ...

Love 6's Private Blog 1万+

HybridCLR热更新打包报错全解析:从原理到实战解决方案

热更新技术是现代游戏和应用开发中实现动态内容交付与Bug修复的核心机制,它允许开发者在无需重新发布完整应用的情况下更新代码逻辑。其原理通常涉及在运行时加载并执行新的代码模块,这要求框架在底层实现安全的代码隔离、内存管理与元数据桥接。在Unity生态中,HybridCLR作为基于IL2CPP的高性能热更新解决方案,通过补充元数据和AOT泛型引用技术,实现了对C#代码的原生级热更支持,显著提升了开发迭代效率与线上问题修复能力。然而,在实际的工程实践中,尤其是在面向Android、iOS等多平台打包构建时,开发者

weixin_29017445的博客 308

力扣hot100_链表(3)_python版本

【代码】力扣hot100_链表(3)_python版本。

Y1n的博客 2503

电子取证之服务器取证思路

服务器取证是一个技术性很强的领域,涉及到多个环节,包括网站重构、网站代码分析、容器分析等。数据库密码的获取通常通过查看配置文件、日志文件、备份等途径,同时可以通过一些绕过技术如禁用身份验证来获取权限。对于不同的数据库,需要根据其特性采取相应的应对方法和命令。

2401_84830066的博客 2486

华为OD机试真题 新系统 2026-08-02 C++ 实现【战士技能规划设计】

你为一款动作游戏设计战士角色的技能。战士每个技能会消耗不同能量,释放技能有两个约束:连续释放技能数量不能超过 m 个,技能能量总和不能超过能量上限 k;如果超过则必须中断当前技能,进入调息状态,也就是分段。

MISAYAONE的博客 72

LeetCode Hot100刷题——反转链表(迭代+递归)

处理到链表末尾时直接返回。

2301_77021913的博客 1563

2026年全国青少年信息素养大赛复赛真题(算法应用主题赛C++初中组:带解析)(7月4日试卷一)【文末附答案和解析】

2026年全国青少年信息素养大赛复赛真题(算法应用主题赛C++初中组:带解析)(7月4日试卷一)【文末附答案和解析】

王老师青少年编程 1732

LeetCode 热题 HOT 100 题解(仅记录解题思路)

由于数组中只有一个元素出现一次,其余元素都出现两次,因此用集合中的元素之和的两倍减去数组中的元素之和,剩下的数就是数组中只出现一次的数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。指针p1在头结点处,指针p2在头结点的next处,然后p1每次移动1格,p2则走2步,若在其中一个进入null之前两者指向同一结点,则代表有环。使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。

a131529的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode 热题 HOT 100【题型归类汇总,助力刷题】

LeetCode 热题 HOT 100🔥【题型归类汇总】,超详细,不断优化ing ...

梦~' 3万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

力扣hot100 | 链表 | 160. 相交链表、206. 反转链表、234. 回文链表、141. 环形链表、142. 环形链表 II、21. 合并两个有序链表、2. 两数相加

给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交:题目数据整个链式结构中不存在环。,函数返回结果后,链表必须示例 1:。。解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

m0_56231308的博客 1175

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

leetcode HOT100总结

本人菜鸡一枚,历时两个月时间把HOT100题做完(Ctrl C-V)了,做完之后还是感觉到很虚,很多中等题还是不会做,于是乎花几天时间把这100题给总结一下。一方面,对自己的知识梳理;另一方面,便于后续回顾。(完成度99,是因为有一道题目收费,没有做!哈哈哈!)以下所有题目都是用Python3实现的。 下面是对这些题目按照算法进行分类整体,主要包括排序、哈希表、递归\回溯、链表、双指针、动态规划、二分查找、贪心、树、深度优先搜索、广度优先搜索等。 在整理之前,先学习一下Python的基本数据类型有哪些,请

qq_36561737的博客 4741

【Leetcode hot 100】206.反转链表

反转链表问题可通过迭代或递归两种方法解决。迭代法使用双指针遍历链表,逐步反转节点指向,时间复杂度O(n),空间复杂度O(1)。递归法则通过递归到链表尾部后回溯反转指针,时间复杂度O(n),但空间复杂度为O(n)(递归栈开销)。两种方法都能高效完成链表反转,迭代法更适合大数据量场景,而递归法代码更简洁但需注意栈溢出风险。

专注Java和MySQL领域知识分享 570

(LeetCode-Hot100)206. 反转链表

本文介绍了LeetCode 169题"多数元素"的三种解法:1)哈希表计数法(O(n)时间空间复杂度);2)排序法(O(n log n)时间);3)Boyer-Moore投票算法(最优解,O(n)时间,O(1)空间)。重点分析了投票算法的原理,通过维护候选元素和计数器,利用多数元素数量超过其他元素总和的特点,无需额外空间即可找到结果。文章包含Java和Go代码实现,通过示例演示了算法执行过程,并给出了数学证明。最后指出面试中应逐步展示不同解法,并讨论了问题扩展思路。

小飞的博客 706

LeetCode 热题 HOT 100

通过系统学习和实战提升,逐步掌握算法精髓,开启你的算法成长之旅。让我们从今天开始,坚定信念,迈向算法高手之路!提示:每天坚持一题,逐步积累算法思维,突破瓶颈,迎接挑战!

Dong雨的博客 4235

力扣hot100

【代码】力扣hot100。

qq_59768361的博客 1400

【Java】HOT100 链表

做过总结。

weixin_43562105的博客 1053

Hot 100总结【leetcode】

leetcode hot100总结

weixin_44911248的博客 6637

leetcode hot100 链表

创建一个大小为k的最小堆, 遍历链表组把每个链表的头节点放入其中, 堆顶即为最小节点, 新建一个链表来存储堆顶的元素, 每弹出一个节点, 就新增一个该节点的下一节点直至链表空堆空。设置第一个公共节点为node, 链表A节点数量为a, 链表B节点数量为b, 两链表公共尾部节点数量为c, 那么两链表到node的距离分别为a-c, b-c。由于需要获得最终的头节点, 所以递归时需要记录一个节点, 每次递归将新头节点计算为当前节点的下一节点, 直至倒数第二个节点, 返回值同样是该新头节点。

weixin_74191696的博客 956

力扣hot100-day1链表

然后遍历链表的节点,一个往头部添加元素,一个往尾部添加元素,然后这样两个a和b中的元素就是相反的,然后通过equals比较两个列表是否相等,相等就是回文,不等就不是。2.定位入环点:当快慢指针相遇后,可利用相遇点与入环点的数学关系推导,设链表起点到入环点的距离为 a,入环点到相遇点的距离为 b,环的长度为 c(即相遇点绕环回到入环点的距离为 c - b)。假设链表a与b相加,而且a与b不相交的部分的长度相同,那么只需要用两个指针pa,pb分别指向两个链表的头,然后在同时遍历,当两个指针相等即为相交点。

weixin_73847538的博客 861

LeetCode Hot100---链表

LeetCode Hot100---链表

记录学习与开发的过程。 908
上一篇: LeetCode Hot100(18/100)——160. 相交链表
下一篇: LeetCode Hot100(20/100)——19. 删除链表的倒数第 N 个结点
TracyCoder123
博客等级 码龄8年 1万+粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyCoder123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值