《C++ 递归、搜索与回溯》第2-3题:合并两个有序链表,反转链表

《C++ 递归、搜索与回溯》第2-3题:合并两个有序链表,反转链表

🔥个人主页:Cx330🌸

❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》

《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔

《Git深度解析》:版本管理实战全解

🌟心向往之行必能至


🎥Cx330🌸的简介:


目录

前言:

2. 合并两个有序链表

算法原理(递归):

思路:

解法代码(C++):

博主手记(字体还请见谅哈):

3. 反转链表

算法原理(递归):

思路:

解法代码(C++):

博主手记(字体还请见谅哈):

结尾:


前言:

聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力

2. 合并两个有序链表

题目链接:

21. 合并两个有序链表 - 力扣(LeetCode)

题目描述:

题目示例:

算法原理(递归):
思路:
  1. 递归函数的含义:交给你两个链表的头结点,你帮我把它们合并起来,并且返回合并后的头结点;
  2. 函数体:选择两个头结点中较小的结点作为最终合并后的头结点,然后将剩下的链表交给递归函数去处理;
  3. 递归处理:当某一个链表为空的时候,返回另外一个链表。

注意: 链表的题一定要画图,搞清楚指针的操作!

解法代码(C++):
class Solution { public: ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) { if(list1==nullptr) return list2; if(list2==nullptr) return list1; if(list1->val<list2->val) { list1->next=mergeTwoLists(list1->next,list2); return list1; } else { list2->next=mergeTwoLists(list2->next,list1); return list2; } } };
博主手记(字体还请见谅哈):

总结:


3. 反转链表

题目链接:

206. 反转链表 - 力扣(LeetCode)

题目描述:

题目示例:

算法原理(递归):
思路:
  1. 递归函数的含义:交给你一个链表的头指针,你帮我逆序之后,返回逆序后的头结点;
  2. 函数体:先把当前结点之后的链表逆序,逆序完之后,把当前结点添加到逆序后的链表后即可;
  3. 递归处理:当前结点为空或者当前只有一个结点的时候,不用逆序,直接返回。

注意: 链表的题一定要画图,搞清楚指针的操作!

解法代码(C++):
class Solution { public: ListNode* reverseList(ListNode* head) { if(head==nullptr||head->next==nullptr) return head; ListNode*newhead=reverseList(head->next); head->next->next=head; head->next=nullptr; return newhead; } };
博主手记(字体还请见谅哈):

结尾:

总结:1、合并两个有序链表:通过递归比较节点值,将较小节点作为头结点,剩余部分继续递归处理;2、反转链表:递归到末尾节点后回溯,逐节点调整指针方向,两种解法均强调画图分析指针操作的重要性,并提供了完整的C++代码实现。专注于通过系统讲解优选算法、递归回溯和贪心算法等核心板块,帮助读者提升代码能力

Read more

JavaScript 基础知识点总结

文章目录 * 前言 * 一、基础核心语法(入门级) * 1. 变量相关 * 2. 数据类型 * 3. 运算符与基本运算 * 二、流程控制(基础) * 1.分支判断 * 2. 循环结构 * 三、内置对象与方法 * 1. Math 对象 * 2. Date 日期对象 * 3. 字符串操作 * 4. 数组操作 * 5. 对象 * 四、函数与页面交互 * 1. 函数 * 2. 页面交互(DOM ) * 总结 前言 JavaScript 作为前端开发的核心编程语言,自 1995 年诞生以来,从最初仅用于页面简单交互的脚本语言,逐步发展为覆盖前端、后端(Node.

By Ne0inhk
Log4j 详解:Java经典日志框架

Log4j 详解:Java经典日志框架

在 Java 开发中,日志是排查问题、监控程序运行状态的核心手段。相比于System.out.println,专业的日志框架能提供更灵活的配置、更优的性能和更丰富的功能。本文将全面讲解 Log4j 的核心概念、配置方式及实战技巧,帮助你快速掌握并落地到项目中。 一、日志框架概述 1.1 什么是日志 日志是程序运行过程中产生的事件记录,典型场景包括: * 业务流程节点:如 “用户 ID=123 提交订单,订单号 = 456”; * 异常详情:捕获异常时记录完整堆栈信息(替代e.printStackTrace()); * 关键参数 / 结果:如接口入参、返回值; * 系统状态:如 JVM 内存使用、数据库连接池状态。 1.2 为什么要打印日志? 调试器断点仅适用于开发阶段,且可能因断点导致多线程问题 “隐藏”;而日志能持久化记录程序运行轨迹,

By Ne0inhk
飞算JavaAI:重新定义研发效能,让代码生成如丝般顺滑

飞算JavaAI:重新定义研发效能,让代码生成如丝般顺滑

飞算JavaAI:重新定义研发效能,让代码生成如丝般顺滑 1. 摘要 在软件开发的浩瀚星空中,每一位程序员都渴望找到提升研发效能的金钥匙。本文将深入探讨飞算JavaAI这一革命性的智能编程助手,它不仅仅是一个代码生成工具,更是开发者效率提升的全新解决方案。通过深入剖析其本地化智能、精准的上下文理解和可控的代码生成机制,我们将揭示如何彻底改变传统软件研发模式。从根本上解决重复劳动、效率低下的痛点,飞算JavaAI正在重新定义Java开发的生产力边界,为开发者带来前所未有的编程体验。 2. 研发的痛与梦:智能编程助手的诞生背景 2.1. 传统研发的困境 每一位程序员都曾经历过这些令人沮丧的时刻: * 重复编写千篇一律的样板代码 * 在复杂项目中迷失代码架构 * 浪费大量时间在低价值的技术细节上 "程序员的价值不应该被重复性劳动消耗,而是应该专注于创新和解决实际问题。" —— 硅谷资深工程师 2.2. 智能编程的理想与现实 传统代码生成工具的局限性: 维度 传统工具 飞算JavaAI 上下文理解 有限 深度智能 本地化处理 依赖云端

By Ne0inhk
运用Java及SunriseSunsetCalculator,探寻长沙市的理论日照时长

运用Java及SunriseSunsetCalculator,探寻长沙市的理论日照时长

目录 前言 一、理论日照时长简介 1、理论日照时长计算 2、理论日照时长数学计算 二、SunriseSunsetCalculator求解 1、SunriseSunsetCalculator引入 2、时区计算设置 3、理论时长计算 4、完整的代码及日常统计 三、总结 前言         在地理学与气象学的研究领域,日照时长一直是备受关注的重要指标。它不仅与地球的自转、公转以及大气环流等诸多自然因素紧密相连,更对人类的生产生活有着深远的影响。从农作物的生长周期到太阳能资源的开发利用,从城市的规划布局到居民的健康生活,日照时长都扮演着不可或缺的角色。而长沙市,作为湖南省的省会城市,以其独特而复杂的地理环境和气候特征,其日照时长的研究具有重要的现实意义和学术价值。         长沙市地处中国南方,属于亚热带季风气候区。这里四季分明,降水充沛,但同时也存在着云层覆盖多、日照时间相对较短等特点。随着城市化进程的加速和经济的快速发展,对于日照时长的精准把握需求日益迫切。一方面,城市规划者需要了解日照时长的分布规律,以合理规划城市建筑布局,确保居民住宅和公共设施能

By Ne0inhk