news 2026/7/1 2:15:34

【LeetCode】反转链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【LeetCode】反转链表

欢迎来到李耶的频道【LeetCode面试题】。


反转链表

题目

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

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

解法一:双指针迭代

思路:使用prevcurr两个指针,prev指向当前节点的前一个节点,curr指向当前节点。遍历链表,将当前节点的next指向前一个节点,然后两个指针同时后移,直到遍历结束。这是最经典、最推荐面试手写的解法。

functionreverseList(head){letprev=null;letcurr=head;while(curr!==null){constnext=curr.next;// 保存下一个节点curr.next=prev;// 反转指针prev=curr;// prev 后移curr=next;// curr 后移}returnprev;}
  • 时间复杂度:O(n),遍历一次链表
  • 空间复杂度:O(1),只使用了常数个指针变量
  • 优势:最实用,性能最优,面试中最稳妥的写法

解法二:递归

思路:递归的核心思想是假设head.next之后的链表已经被反转好了,然后只需要处理headhead.next之间的指针关系。递归的终止条件是链表为空或只有一个节点。

functionreverseList(head){// 递归终止条件:空链表或只有一个节点if(head===null||head.next===null){returnhead;}// 递归反转 head.next 之后的链表,返回新的头节点constnewHead=reverseList(head.next);// 让 head.next 指向 head,完成反转head.next.next=head;head.next=null;returnnewHead;}
  • 时间复杂度:O(n),每个节点访问一次
  • 空间复杂度:O(n),递归调用栈的深度取决于链表长度
  • 优势:代码最简洁,体现了递归的优雅,但要注意链表过长可能导致栈溢出

解法三:解构赋值(ES6 语法糖)

思路:本质上还是双指针法,但利用 ES6 的数组解构赋值,在一行内完成指针的交换和移动,代码非常简洁。

functionreverseList(head){letprev=null;letcurr=head;while(curr!==null){[curr.next,prev,curr]=[prev,curr,curr.next];}returnprev;}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
  • 优势:写法新颖,代码简短,适合展示对 ES6 语法的熟悉程度,但可读性略低于传统双指针

解法四:头插法

思路:新建一个空链表newHead,遍历原链表,每遇到一个节点就把它"头插"到新链表中。遍历结束后,newHead就是反转后链表的头节点。

functionreverseList(head){letnewHead=null;letcurr=head;while(curr!==null){constnext=curr.next;// 头插法:将当前节点插入到新链表的头部curr.next=newHead;newHead=curr;curr=next;}returnnewHead;}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
  • 优势:思路直观,"头插法"是链表操作中的经典技巧,也适用于其他链表题目

四种解法对比

解法时间复杂度空间复杂度推荐指数适用场景
双指针迭代O(n)O(1)⭐⭐⭐⭐⭐面试首选,最稳妥
递归O(n)O(n)⭐⭐⭐⭐代码简洁,但注意栈溢出
解构赋值O(n)O(1)⭐⭐⭐ES6 语法糖,展示语言特性
头插法O(n)O(1)⭐⭐⭐⭐思路直观,头插技巧通用

扩展题

  1. 反转链表 II:给你单链表的头指针head和两个整数leftright,反转从位置left到位置right的链表节点,返回反转后的链表。
  2. K 个一组翻转链表:给你链表的头节点head,每k个节点一组进行翻转,返回修改后的链表。
  3. 两两交换链表中的节点:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。
  4. 回文链表:给你一个单链表的头节点head,请你判断该链表是否为回文链表。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 2:13:53

大模型知识库(10)WorkBuddy介绍

1.WorkBuddy 能听懂你说话 能在你电脑上自主思考规划 能实际操作文件和软件 能交付可直接使用成果的 AI办公同事。它代表了AI从"问答工具"向"执行型助手"的进化方向2. WorkBuddy 的核心能力:1)自然语言任务执行:一句…

作者头像 李华
网站建设 2026/7/1 2:13:32

自动驾驶L1~L5

自动驾驶的L1到L5分级,是目前全球最通用的标准,由国际汽车工程师学会(SAE International)制定,用来定义一辆车的“聪明”程度。等级名称核心定义通俗理解谁在开车谁负责监控事故责任归属L0无自动化完全由人类驾驶员操作…

作者头像 李华
网站建设 2026/7/1 2:09:55

企业智能体的下半场,如何让智能体越用越聪明?

当我们谈 Agent 进化的时候,通常涵盖两类场景。一种是员工办公场景,通过 Coding Agent 或通用 Agent 的记忆、协作风格、用户画像等能力,让 Agent 越用越聪明、越用越懂用户。另一种是企业的业务场景,比如企业对外提供的客服 Agen…

作者头像 李华
网站建设 2026/7/1 2:08:10

GESP2026年6月认证C++三级( 第三部分编程题(1、加密))精讲

这一题虽然是三级第一道编程题,但实际上它是一道最经典的"映射(Mapping)"问题,也是以后学习数组映射、哈希表、字符替换、密码替换等知识的重要基础。🏰 GESP三级 编程题第一题《密码王国——数字加密大冒险…

作者头像 李华
网站建设 2026/7/1 2:07:15

霞鹜文楷:如何用开源字体解决你的中日韩多语言排版难题

霞鹜文楷:如何用开源字体解决你的中日韩多语言排版难题 【免费下载链接】LxgwWenKai An unprofessional open-source Chinese font derived from Fontworks Klee One. 一款非专业的开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。 项目地址: h…

作者头像 李华
网站建设 2026/7/1 2:06:13

Adobe-GenP 3.0:终极Adobe软件激活指南与使用技巧

Adobe-GenP 3.0:终极Adobe软件激活指南与使用技巧 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP 3.0是一款功能强大的Adobe Creative Cloud…

作者头像 李华