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

递归的模板 (以反转链表为例)

我们再来回顾一下递归的模板,终止条件,递归调用,逻辑处理。

func reverseList(head *ListNode) *ListNode {// 终止条件if head == nil || head.Next == nil {return head}// 逻辑处理(可能有,也可能没有,具体问题具体分析)// 递归调用reverse := reverseList(head.Next)// 逻辑处理(可能有,也可能没有,具体问题具体分析)return reverse
}

终止条件

终止条件就是链表为空,或者是链表没有尾结点的时候,直接返回:

if head == nil || head.Next == nil {return head
}

递归调用

递归调用是要从当前节点的下一个结点开始递归。

逻辑处理

逻辑处理是要把当前节点挂到递归之后的链表的末尾,参考如下:

func ReverseList(head *ListNode) *ListNode {// 终止条件if head == nil || head.Next == nil {return head}// 保存当前节点的下一个结点next := head.Next// 从当前节点的下一个结点开始递归调用reverse := ReverseList(next)// reverse是反转之后的链表,因为函数ReverseList// 表示的是对链表的反转,所以反转完之后next肯定// 是链表reverse的尾结点,然后我们再把当前节点// head挂到next节点的后面就完成了链表的反转。next.Next = head// 这里head相当于变成了尾结点,尾结点都是为空的,// 否则会构成环head.Next = nilreturn reverse
}
http://www.xdnf.cn/news/59509.html

相关文章:

  • .net core 中directory , directoryinfo ,file, fileinfo区别,联系,场景
  • mindspeed-rl使用注意事项
  • unity TEngine学习4
  • 驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程
  • AIWS全链路开发与MCP框架下的高可用服务架构设计
  • AI问答Bug修改
  • 教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!
  • 数据结构——栈和队列
  • Debian GNU/Linux的新手入门介绍
  • 动态规划-零钱兑换
  • MCP 框架中,stdio 模式和 SSE(Server-Sent Events) 模式的区别是什么
  • 01_Flask快速入门教程介绍
  • 楼宇自控怎样推动能源高效利用与建筑设备的科学管理
  • 玩转Docker | 使用Docker部署nullboard任务管理工具
  • 介绍XML
  • 【C#】.net core 6.0调用MVC API接口时,提示Unsupported Media Type,状态码415
  • 多源异构网络安全数据(CAPEC、CPE、CVE、CVSS、CWE)的作用、数据内容及其相互联系的详细分析
  • 学习笔记二十二—— 并发五大常见陷阱
  • windows传文件给mac, linux或者其他windows
  • 单例模式的使用场景 以及 饿汉式写法(智能指针)
  • 批量替换多个 Word 文档中的指定图片
  • Vue的模板编译过程
  • QT写的exe嵌入到wpf中
  • 4.21 从0开始配置spark-local模式
  • django入门
  • 基于 FFmpeg 的音视频处理基础原理与实验探究
  • RocketMQ CommitLog 核心恢复机制解析:recoverNormally 如何守护消息可靠性
  • 45.[前端开发-JavaScript高级]Day10-迭代器-生成器
  • 深度学习中的归一化技术:从原理到实战全解析
  • 论文速报《Being-0:结合视觉语言模型与模块化技能的人形机器人智能体》