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

每日算法题 20---206.反转链表

题目

206.反转链表

要求

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

示例

思路1

在之前创建链表的方法里有头插法、尾插法,在这里也一样,可以用这两种方法来实现链表的反转,大家要注意:链表的算法题一定要在纸上好好画一画,要不然代码能看懂第一遍,但是看不懂第二遍,我用例子来帮大家理解步骤:

头插法:假设链表1 → 2 → 3 → null初始状态:pre = null、cur = 1

第 1 轮循环:处理 cur = 1:t = cur.nextt = 2;cur.next = pre1 → null;pre = curpre = 1;cur = tcur = 2

现在结果:已反转:1 → null

第 2 轮循环:处理 cur = 2:t = cur.nextt = 3;cur.next = pre2 → 1(头插!插到最前面);pre = curpre = 2;cur = tcur = 3

现在结果:已反转:2 → 1 → null

第 3 轮循环:处理 cur = 3:t = cur.nextt = null;cur.next = pre3 → 2(再次头插);pre = curpre = 3;cur = tcur = null

现在结果:已反转:3 → 2 → 1 → null

循环结束:cur=null,返回pre(3)最终实现反转

代码1

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseList(ListNode head) { 头插法 ListNode pre=null; ListNode cur=head; while(cur!=null){ ListNode t=cur.next; cur.next=pre; pre=cur; cur=t; } return pre; } }

思路2

尾插法:先递归,递归到最后一个节点,再回溯,从最后一对节点开始,两两反转,最终返回原链表的最后一个节点,就是新链表的头,依旧举个例子帮助大家理解:初始链表:1->2->3->null;

递归:核心代码为ListNode revHead = reverseList(head.next);

第 1 层调用:head = 1,调用reverseList(2)

第 2 层调用:head = 2,调用reverseList(3)

第 3 层调用:head = 3,触发终止条件head.next == null直接return 3

回溯:从后往前返回,revHead=3(新链表的头节点,保持不变)

回溯到第 2 层:head=2;revHead=3;tail=head.next=3tail.next = head; // 3 → 2

head.next = null; // 2 → null;

现在链表变成了:3 → 2 → null

回溯到第 1 层:head=1;revHead=3;tail=head.next=2;tail.next = head; // 2 → 1 head.next = null; // 1 → null;

现在链表已全部反转:3 → 2 → 1 → null

代码2

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseList(ListNode head) { //尾插法(递归) if(head==null||head.next==null){ return head; } ListNode revHead=reverseList(head.next); ListNode tail=head.next; tail.next=head; head.next=null; return revHead; } }
http://www.jsqmd.com/news/560924/

相关文章:

  • 面试必备之项目细节技能参考
  • LoRaWAN节点功耗优化指南:从扩频因子选择到上报周期设置的7个技巧
  • 提升Blender创作效率的终极资源指南:从新手到专家的完整解决方案
  • 外贸AI营销平台怎么选?从AI出海提效系统到海外市场AI推广平台,这几家值得关注(附带联系方式) - 品牌2026
  • 当电力系统遇上MATLAB:手把手玩转SVC设计
  • IFN-γ蛋白在CAR-T治疗中的双重作用研究
  • 【从零开始】手写BLE协议栈(4-2)高精度调度器
  • PicView图片浏览器完全指南:从零开始掌握高效图片管理
  • 深入QNN SDK:从动态库加载到模型执行,一次搞懂qnn-sample-app的核心工作流
  • 老旧S7-200系统以太网升级改造:对接S7-1200与触摸屏通讯实例
  • SD 协议
  • 2026年湖南长沙月子中心/月子会所选购指南:湖南爱睦母婴服务有限公司 - 2026年企业推荐榜
  • 2026 年 3 月北京发电机出租公司口碑推荐榜单:发电车/静音发电机/发电机组租赁电话,北京及周边服务商选择指南 - 海棠依旧大
  • Twitter API v2研究数据获取与API应用全面指南
  • 面试必备之功能测试技能参考
  • 企业级智能体开发首选:腾讯云平台助力高效便捷实现,收藏必备!
  • 【SqlServer】SQL Server Management Studio (SSMS) 从零到精通:下载、安装、配置与实战技巧全解析
  • 头皮精华推荐2026:新手入门必看的选购指南 - 博客万
  • 基于RST数字控制器设计(二自由度控制)的pmsm电流环控制,速度环负载扰动补偿 (1)基于离...
  • 春招进入下半场,这些坑不避开,很容易白投几百份简历
  • CoPaw创意写作与营销文案生成效果比拼
  • 万亿规模:零碳园区建设方案
  • Umi-OCR:三大离线OCR技术突破与全场景应用实践指南
  • 双模型协作方案:OpenClaw同时接入nanobot和云端大模型
  • 终极指南:如何为MiniSearch编写自定义插件和扩展,打造专属搜索体验
  • 不花冤枉钱:2026雅思词汇练习app推荐 - 品牌2025
  • 【从零开始】手写BLE协议栈(3-2)连接参数为什么不能乱填:Interval、Latency、Timeout 与频道图
  • 2026连云港家装市场深度调研:10家履约能力强、业主口碑好的装修公司 - GEO排行榜
  • 2026最新贵州刺梨原浆厂家测评!贵阳优质刺梨原浆公司权威榜单发布 - 十大品牌榜
  • VisualVM企业级部署指南:大规模Java应用监控最佳实践