《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 前端开发:从入门到精通的奇幻之旅

JavaScript 前端开发:从入门到精通的奇幻之旅

目录 一、引言 二、JavaScript 基础 (一)变量与数据类型 (二)运算符 (三)控制结构 三、函数 (一)函数定义与调用 (二)函数作用域 (三)闭包 四、DOM 操作 (一)DOM 简介 (二)获取元素 (三)修改元素属性 (四)添加和删除元素 五、事件处理 (一)事件简介 (二)添加事件处理程序 (三)常见事件类型 一、引言 在当今的互联网世界中,前端开发扮演着至关重要的角色。而 JavaScript 无疑是前端开发领域的核心技术之一。它就像一把神奇的钥匙,打开了创建交互式网页的大门。无论是炫酷的动画效果、

By Ne0inhk

Java集成PaddlePaddle OCR:让文字识别变得如此简单

还在为Java项目中需要文字识别功能而烦恼吗?传统方案要么依赖复杂的Python环境,要么调用云端API存在延迟和安全风险。现在,通过SmartJavaAI项目,你可以轻松实现Java环境下的离线OCR识别,无需任何Python依赖! 【免费下载链接】SmartJavaAIJava免费离线AI算法工具箱,支持人脸识别(人脸检测,人脸特征提取,人脸比对,人脸库查询,人脸属性检测:年龄、性别、眼睛状态、口罩、姿态,活体检测)、目标检测(支持 YOLO,resnet50,VGG16等模型)等功能,致力于为开发者提供开箱即用的 AI 能力,无需 Python 环境,Maven 引用即可使用。目前已集成 RetinaFace、SeetaFace6、YOLOv8 等主流模型。 项目地址: https://gitcode.com/geekwenjie/SmartJavaAI 技术解密:PaddlePaddle与Java的完美融合 SmartJavaAI采用DJL(Deep

By Ne0inhk
Bun替代Nodejs,JavaScrpit运行新环境-Bun,更快、更现代的开发体验

Bun替代Nodejs,JavaScrpit运行新环境-Bun,更快、更现代的开发体验

nodejs我想很多人在使用,已经得到广泛运用。但今天介绍一款比node.js高阶的一个新组件Bun,它在HTTP服务器性能、文件系统操作、启动时间、包安装时间性能上高于node.js。 什么是bun,Bun的设计理念是开箱即用,减少配置和依赖,让开发者可以更专注于编写代码。Bun是一个全新的JavaScript运行时和工具链,它的核心目标是替代Node.js,提供更快的性能、更简洁的API和更好的开发体验。Bun使用JavaScriptCore引擎(也是Safari浏览器使用的引擎),V8引擎是Node.js使用的引擎,这是其性能优势的主要来源之一。 Bun不仅是一个运行时,它还集成了包管理器、打包工具、测试运行器等功能,目标成为一站式的JavaScript开发平台。我这里重点对这两位前端的主角在性能、内置功能、环境、兼容性、nodejs项目迁移、bun的适用场景进行对比总结。 性能优势 启动速度更快 Bun的底层做了大量的优化,启动速度比Node.js快10-20倍。这主要是因为Bun使用了JavaScriptCore引擎,特别是在微服务和serverless环境中,由

By Ne0inhk
使用飞算JavaAI实现在线图书借阅平台

使用飞算JavaAI实现在线图书借阅平台

标签<JavaAI> 在软件开发领域,寻找高效的开发工具一直是开发者的追求。飞算 JavaAI 作为一款新兴的 AI 辅助开发工具,宣称能实现从需求分析到代码生成的高效流程。本次,我选择使用飞算 JavaAI 开发在线图书借阅平台,并将生成的项目转换为 SpringBoot 项目,沉浸式体验其在实际开发中的表现,同时对比同类产品,探索它在开发效率、代码质量等方面的优势与不足。 一、飞算 JavaAI 操作流程全记录 (一)需求分析与功能拆解 在线图书借阅平台需要满足多方面的功能需求,包括用户管理(注册、登录、个人信息维护、权限控制)、图书资源管理(信息录入、分类、搜索、展示)、借阅管理(申请、审批、记录追踪)、归还管理(归还处理、逾期提醒、罚款计算)、预约管理(预约图书、

By Ne0inhk