news 2026/9/2 7:48:07

hot 206

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot 206

【LeetCode 简单题】206. 反转链表:两种思路 + 代码详解

今天来拆解 LeetCode 上的经典简单题 ——206. 反转链表,这是链表操作的入门必刷题,同时也是很多面试的 “开胃菜”。本文会分享两种常用解法,从思路到代码逐一分析,帮你彻底搞懂链表反转的逻辑~

题目描述

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

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

解法一:双指针法(原地反转,空间复杂度 O (1))

这是链表反转的最优解法,不需要额外空间,直接在原链表上修改指针指向。

思路分析

核心是用两个指针跟踪节点,通过 “断链 - 反转指向 - 移动指针” 的步骤,逐步将原链表的节点反向串联。

步骤拆解:

  1. 定义两个指针:newHead(指向反转后的新链表头,初始为nullptr)、temp(临时存储原链表的下一个节点);
  2. 遍历原链表,每次取出当前节点head
    • 先用temp保存head的下一个节点(防止断链后找不到后续节点);
    • headnext指向newHead(完成当前节点的反转);
    • 移动newHeadhead(新链表头更新为当前节点);
    • 移动headtemp(继续遍历原链表);
  3. 遍历结束后,newHead就是反转后的链表头。

代码实现

cpp

运行

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* newHead = nullptr; // 反转后的新链表头 ListNode* temp = nullptr; // 临时存储原链表的下一个节点 while (head) { temp = head->next; // 保存下一个节点 head->next = newHead; // 当前节点指向新链表头(反转) newHead = head; // 新链表头更新为当前节点 head = temp; // 继续遍历原链表 } return newHead; } };

解法二:辅助容器法(思路直观,空间复杂度 O (n))

如果对指针操作不熟悉,可以先用辅助容器暂存节点信息,再重新构建链表。这种方法思路更直观,适合新手理解。

思路分析

vector存储原链表的所有节点值,反转容器后,基于容器中的值创建新链表。

步骤拆解:

  1. 遍历原链表,将每个节点的val存入vector
  2. 反转vector(此时容器内的值是原链表的逆序);
  3. 创建一个虚拟头节点dummy(简化新链表的串联逻辑),遍历反转后的vector,依次创建新节点并串联;
  4. 返回虚拟头节点的next(即新链表的头)。

代码实现

class Solution { public: ListNode* reverseList(ListNode* head) { vector<int> vals; // 1. 存储原链表的所有节点值 while (head) { vals.emplace_back(head->val); head = head->next; } // 2. 反转容器(值的顺序逆序) reverse(vals.begin(), vals.end()); // 3. 基于反转后的值构建新链表 ListNode* dummy = new ListNode(0); // 虚拟头节点 ListNode* cur = dummy; for (int val : vals) { cur->next = new ListNode(val); // 创建新节点 cur = cur->next; // 移动指针 } return dummy->next; // 虚拟头的next是新链表头 } };

两种解法对比

解法时间复杂度空间复杂度适用场景
双指针法O(n)O(1)追求空间效率,面试推荐写法
辅助容器法O(n)O(n)新手理解链表反转逻辑,或需保留原链表

总结

反转链表是链表操作的基础题,双指针法是必须掌握的最优解(空间 O (1)、逻辑清晰),辅助容器法则是 “退而求其次” 的直观思路。建议先理解辅助容器法的逻辑,再过渡到双指针法的指针操作~

如果你有其他解法,欢迎在评论区交流~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 20:47:00

大模型选型难题(Open-AutoGLM vs ChatGLM 究竟有何不同)

第一章&#xff1a;大模型选型难题的背景与意义 在人工智能技术迅猛发展的今天&#xff0c;大规模预训练模型已成为推动自然语言处理、计算机视觉和多模态任务进步的核心驱动力。然而&#xff0c;随着模型参数量的不断攀升&#xff0c;如何从众多候选模型中选择最适合特定业务场…

作者头像 李华
网站建设 2026/9/2 21:54:51

Open-AutoGLM难用?切换这4款高口碑App,开发效率立升300%

第一章&#xff1a;Open-AutoGLM类似的app哪个好用在探索自动化语言模型应用的过程中&#xff0c;Open-AutoGLM 提供了强大的本地化推理与任务自动化能力。然而&#xff0c;对于希望寻找替代方案的用户&#xff0c;市面上已有多个功能相似且体验更优的应用可供选择。主流替代应…

作者头像 李华
网站建设 2026/9/3 2:57:23

Open-AutoGLM和ChatGLM究竟谁更强?:从架构到落地的全面剖析

第一章&#xff1a;Open-AutoGLM沉思和ChatGLM的宏观定位在大模型技术迅猛发展的背景下&#xff0c;ChatGLM系列模型凭借其高效的中英双语理解能力与本地化部署优势&#xff0c;已成为企业级AI应用的重要基石。而Open-AutoGLM作为其自动化推理扩展框架&#xff0c;致力于将复杂…

作者头像 李华
网站建设 2026/8/22 16:29:20

Open-AutoGLM卡顿崩溃频发?紧急推荐5款稳定高效的同类工具(速看)

第一章&#xff1a;Open-AutoGLM卡顿崩溃问题深度解析在部署和使用 Open-AutoGLM 模型过程中&#xff0c;部分用户频繁反馈系统出现卡顿甚至进程崩溃的现象。此类问题多集中于高并发推理、长文本生成及显存资源紧张的场景&#xff0c;严重影响实际应用体验。深入分析表明&#…

作者头像 李华
网站建设 2026/8/29 6:36:05

未来已来:Open-AutoGLM在金融、医疗等5大领域的真实落地成果曝光

第一章&#xff1a;Open-AutoGLM技术演进与行业影响Open-AutoGLM作为新一代开源自动语言生成模型&#xff0c;融合了大规模预训练与自动化推理优化技术&#xff0c;正在重塑自然语言处理领域的技术边界。其核心优势在于支持多任务自适应、低延迟推理和可扩展的插件架构&#xf…

作者头像 李华
网站建设 2026/9/1 2:35:18

【Open-AutoGLM开源框架深度解析】:掌握下一代AI自动化开发核心技术

第一章&#xff1a;Open-AutoGLM开源框架概述Open-AutoGLM 是一个面向通用语言模型自动化开发与部署的开源框架&#xff0c;旨在降低大模型应用门槛&#xff0c;提升从数据预处理到模型推理全流程的工程效率。该框架支持多种主流语言模型的无缝接入&#xff0c;提供模块化组件以…

作者头像 李华