复习Day11:链表part04: 206. 反转链表、92. 反转链表II、25. K 个一组翻转链表、148. 排序链表
我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用CLion了,使用leetcode自带的IDE模拟面试环境。
哈希表章节的题目思路很清晰,主要是C++中的写法。
206. 反转链表
如何使用递归解法反转整个 单链表:
class Solution {
public:ListNode* reverseList(ListNode* head) {/* 递归解法 */return reverse(head);}ListNode* reverse(ListNode *head){if(head == nullptr || head->next == nullptr){return head;}ListNode* last = reverse(head->next);head->next->next = head;head->next = nullptr;return last;}
};
reverse 函数定义是这样的:
输入一个节点 head,将「以 head 为起点」的链表反转,并返回反转之后的头结点。
原来的链表:
[外链图片转存中…(img-KLgVmb78-1696603051839)]
运行完
ListNode last = reverse(head.next);
[外链图片转存中…(img-J17okqo4-1696603051839)]
链表变成了这样(先不要管递归的压栈的实现细节):
[外链图片转存中…(img-d2chnyBs-1696603051840)]
然后运行
head.next.next = head;
[外链图片转存中…(img-nOEn10VM-1696603051840)]
接下来把head->next指向null,并返回现在的头节点:last
head->next = nullptr;
return last;
[外链图片转存中…(img-dQVs9BKX-1696603051840)]
1、递归函数要有 base case,也就是这句:
if (head == NULL || head->next == NULL) {return head;
}
意思是如果链表为空或者只有一个节点的时候,反转结果就是它自己,直接返回即可。
2、当链表递归反转之后,新的头结点是 last,而之前的 head 变成了最后一个节点,别忘了链表的末尾要指向 null:
head->next = NULL;
92. 反转链表II
leetcode链接:https://leetcode.cn/problems/reverse-linked-list-ii/
给你单链表的头指针 head 和两个整数 left 和 right ,
其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

如何反转单链表的一部分?这里迭代解法在之前完全反转链表中已经说过了,这里重点关注递归法 。
(迭代的思路大概是:先用一个 for 循环找到第 m 个位置,然后再用一个 for 循环将 m 和 n 之间的元素反转)
25. K 个一组翻转链表
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
[外链图片转存中…(img-0ZYveRdG-1696603051840)]
此题见:https://labuladong.github.io/algo/di-yi-zhan-da78c/shou-ba-sh-8f30d/ru-he-k-ge-d591d/
class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {if (head == nullptr) return nullptr;// 区间 [a, b) 包含 k 个待反转元素ListNode *a, *b;a = b = head;for (int i = 0; i < k; i++) {// 不足 k 个,不需要反转,base caseif (b == nullptr) return head;b = b->next;}// 反转前 k 个元素ListNode *newHead = reverse(a, b);// 递归反转后续链表并连接起来a->next = reverseKGroup(b, k);return newHead;}ListNode* reverse(ListNode* a, ListNode* b) {ListNode *pre, *cur, *nxt;pre = nullptr; cur = a; nxt = a;// while 终止的条件改一下就行了while (cur != b) {nxt = cur->next;cur->next = pre;pre = cur;cur = nxt;}// 返回反转后的头结点return pre;
}
};
148. 排序链表
class Solution {
public:ListNode* sortList(ListNode* head) {return sortList(head, nullptr);}ListNode* sortList(ListNode* head, ListNode* tail) {if (head == nullptr) {return head;}if (head->next == tail) {head->next = nullptr;return head;}ListNode* slow = head, *fast = head;while (fast != tail) {slow = slow->next;fast = fast->next;if (fast != tail) {fast = fast->next;}}ListNode* mid = slow;return merge(sortList(head, mid), sortList(mid, tail));}ListNode* merge(ListNode* head1, ListNode* head2) {ListNode* dummyHead = new ListNode(0);ListNode* temp = dummyHead, *temp1 = head1, *temp2 = head2;while (temp1 != nullptr && temp2 != nullptr) {if (temp1->val <= temp2->val) {temp->next = temp1;temp1 = temp1->next;} else {temp->next = temp2;temp2 = temp2->next;}temp = temp->next;}if (temp1 != nullptr) {temp->next = temp1;} else if (temp2 != nullptr) {temp->next = temp2;}return dummyHead->next;}
};
相关文章:
复习Day11:链表part04: 206. 反转链表、92. 反转链表II、25. K 个一组翻转链表、148. 排序链表
我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用CLion了,使用leetcode自带的IDE模拟面试环境。 哈希表章节的题目思路很清晰&…...
一年一度的国庆节又结束了
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
雷达干扰和烧穿范围简介
一、干扰信号比 J/S或J-to-S是从目标发射的干扰信号接收的功率(J)与从目标的雷达反向散射接收的功率的比率。 二、烧穿范围 通过电子攻击(J)可以首先检测到目标回波信号(S)的雷达到目标的距离。 三、自保护干扰 也称为主瓣干扰(雷达回波源和干扰机并置)。 烧穿范围…...
“秋天第一只大闸蟹”背后,看见京东一体化供应链
京东似乎正在从一个大闸蟹的物流服务商、销售商,转变为一个大闸蟹的“供货商”。 作者|斗斗 编辑|皮爷 出品|产业家 阳澄湖连续几天的降雨,使得通往蟹塘的路异常难走。 长期驻扎此地的京东相关负责人蹲在蟹塘边的小路上,指着蟹塘说道…...
大模型Java编码能力评估
大模型如火如荼发展,不能只看热闹,也需要躬身入局。要想评估大模型的能力,必须有一个评估方法和评估数据集。下面就梳理下当前大模型是如何评估代码能力的 权威评估 opencompass: https://opencompass.org.cn/datalearner: https://www.dat…...
javascript选择框和选择文本的创建与增加以及设置选中项
<script type"text/javascript">//得到选中项的索引,文本和值函数function getselected(selectedIndex){var selectboxdocument.forms[0].elements["location"];var indexselectbox[selectedIndex];var selectedOptionselectbox.options[…...
汽车驾驶任务的隐马尔可夫模型识别方法研究
汽车驾驶任务的隐马尔可夫模型识别方法研究 一、Introduction 自动驾驶汽车经过了几十年的发展,是目前国内外汽车行业中的重要研究方向。自 动驾驶汽车的智能化需要车辆能够有类“人”的行为,在决策策略上可以满足人的心理 需求。人在驾驶过程中&#…...
Java编程题(完数)
题目 一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如61+2+3(6的因子是1,2,3)。 现在,你要写一个程序,读入两个正整数n和m(1<n<m<…...
国庆day6
国庆day6 汇编语言的组成 伪操作 不参与程序的执行,但是用于告诉编译器程序该怎么编译 如: .text .global .end .if .else .endif .data汇编指令 汇编器将一条汇编指令编译成一条机器码,在内存里一…...
力扣 -- 873. 最长的斐波那契子序列的长度
解题步骤: 参考代码: class Solution { public:int lenLongestFibSubseq(vector<int>& nums) {int nnums.size();unordered_map<int,int> hash;for(int i0;i<n;i){hash[nums[i]]i;}int ret2;vector<vector<int>> dp(n,v…...
【程序员必看】计算机网络,快速了解网络层次、常用协议和物理设备!
文章目录 0 引言1 基础知识的定义1.1 计算机网络层次1.2 网络供应商 ISP1.3 猫、路由器、交换机1.4 IP协议1.5 TCP、UDP协议1.6 HTTP、HTTPS、FTP协议1.7 Web、Web浏览器、Web服务器1.8 以太网和WLAN1.9 Socket (网络套接字) 2 总结 0 引言 在学习的过程…...
1.软件测试基础
一、软件测试概念 1.什么是软件 软件是计算机程序,是由计算机代码编写的一系列指令和数据,可以实现各种功能。它指的是计算机系统中的应用程序,包括操作系统、应用软件、驱动程序等。软件可以通过编程语言编写和开发,并可以安装…...
综合布线系统概述
对于现代化的大楼,其内部信息传输通道系统(综合布线系统) 已不仅仅要求能支持一般的语音传输,还应能够支持多种计算机网络 协议及多种厂商设备的信息互连,可适应各种灵活的,容错的组网方 案,…...
Labview 实战 99乘法表
基于新手小白,使用Labview实现99乘法表,敢于发表自己的一点方法,还请各位大侠放过! 如下: 运行效果如下: 思路为:将要显示出来的数据,全部转换为字符串形式,再塞入到数组…...
需求变化频繁的情况下,如何实施自动化测试
一.通常来说,具备以下3个主要条件才能开展自动化测试工作: 1.需求变动不频繁 自动化测试脚本变化的频率决定了自动化测试的维护成本。如果需求变动过于频繁,那么测试人员就需要根据变动的需求来不断地更新自动化测试用例,从而适应新的功能。…...
C++设计模式-桥接(Bridge)
目录 C设计模式-桥接(Bridge) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-桥接(Bridge) 一、意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 二、适用性 你不希望在抽象和它…...
Springboot+vue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的开放性实验室管理系统,采用M(…...
1.9.C++项目:仿muduo库实现并发服务器之Connection模块的设计
项目完整在: 文章目录 一、Connection模块:这是一个对于通信连接进行整体管理的一个模块,对一个连接的操作都是通过这个模块来进行!二、提供的功能三、实现思想(一)功能(二)意义&am…...
Iphone文件传到电脑用什么软件,看这里
在数字化时代,文件传输已经成为我们日常生活中不可或缺的一部分。然而,苹果用户在将手机文件传输到电脑时,往往会面临一些困扰。曾经的“文件传输助手”并不能完全满足用户的需求。于是,很多人开始寻找更便捷的解决方案。在本文中…...
JS进阶-原型对象prototype
原型 原型就是一个对象,也称为原型对象 构造函数通过原型分配的函数是所有对象所共享的。 JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,所以我们也称为原型对象 这个对象可以挂载函数,对象…...
Tiger项目:为AI智能体构建通用工具生态,解决LLM应用“最后一公里”难题
1. 项目概述:为AI智能体装上“神经连接” 如果你正在构建或使用基于大语言模型(LLM)的AI智能体(Agent),比如用CrewAI、LangChain或AutoGen搭建工作流,那么你肯定遇到过这个核心痛点:…...
基于AI人工智能图像识别的速度限速牌识别 YOLOv8限速牌识别
YOLOv8限速牌识别技术详解 一、技术背景与需求分析 随着智能驾驶辅助系统(ADAS)的普及和智慧交通建设的加速,交通标志识别(TSR)技术已成为现代车辆的核心能力之一。在各类交通标志中,限速标志的准确识别直接关系到行车安全和法规遵守。传统基于模板匹配的…...
STM32H7的QSPI内存映射模式实战:把W25Q64当内部Flash用(含CubeMX配置)
STM32H7 QSPI内存映射模式深度解析:将外部Flash变为高速只读存储区 在嵌入式系统开发中,存储资源常常成为性能瓶颈。STM32H7系列微控制器通过QUADSPI接口的内存映射模式,为开发者提供了一种创新的解决方案——将外部SPI Flash设备映射到MCU的…...
从‘换硬币’到算法优化:聊聊暴力枚举的局限性与时间复杂度的估算
从暴力枚举到算法优化:硬币问题的计算思维进阶 当我们第一次面对"换硬币"这类问题时,最直观的解决方案往往是暴力枚举——通过多重循环尝试所有可能的组合。这种方法简单直接,对于初学者来说易于理解和实现。然而,随着问…...
Chrome网页批量替换神器:3分钟掌握高效文本编辑技巧
Chrome网页批量替换神器:3分钟掌握高效文本编辑技巧 【免费下载链接】chrome-extensions-searchReplace 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-extensions-searchReplace 你是否曾为网页上重复的文本修改而烦恼?面对需要批量替换…...
别再让Excel卡死了!手把手教你安装Oracle Crystal Ball并管理加载项(附32/64位安装包)
高效管理Oracle Crystal Ball加载项:告别Excel卡顿的终极指南 你是否经历过这样的场景:刚安装完Oracle Crystal Ball准备大展身手,却发现Excel启动速度慢得像蜗牛爬行?作为一款强大的蒙特卡洛模拟工具,Crystal Ball确…...
Noto Emoji终极指南:3步解决跨平台表情符号显示问题
Noto Emoji终极指南:3步解决跨平台表情符号显示问题 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 你是否曾在不同设备上看到同一个表情符号显示为"□□"乱码?或者在不同操作…...
ARM缓存控制器架构解析与性能优化实践
1. ARM缓存控制器架构概述 在现代处理器设计中,缓存控制器作为CPU与主存之间的关键桥梁,其设计优劣直接影响系统整体性能。ARM架构的缓存控制器采用分层设计理念,通过数据RAM、标签RAM和脏RAM三大核心组件的协同工作,实现了高效的…...
船载AIS的Class A、Class B和接收器到底怎么选?一篇讲清休闲帆船、渔船和小货船的设备配置指南
船载AIS设备选购全指南:从合规到实战的智能决策 清晨的港口,一艘30英尺的休闲帆船正在做最后的出海准备。船长盯着仪表盘上闪烁的AIS接收器信号,思考着是否该升级为收发一体的Class B设备——这个决定可能关系到未来航行中能否被大型商船及时…...
从《蜘蛛侠》到《黑客帝国》:聊聊大厂PCG管线里,美术和程序怎么‘分锅’与协作
从《蜘蛛侠》到《黑客帝国》:游戏工业化中的美术与程序协作范式演进 当《漫威蜘蛛侠》的虚拟曼哈顿在玩家眼前展开时,很少有人意识到这座数字城市的每块砖石都凝结着美术与程序团队的博弈。而在《黑客帝国:觉醒》的完全程序化都市里ÿ…...
