leetcode每日一题37

92.反转链表II

这道题需要1.找到位置left 2.在位置left开始,一前一后两个指针反转链表,代码同206.反转链表,直到后一个指针指向right 3.把反转后的头节点链接到left-1后面,把反转后的链表尾节点指向right+1位置的节点
因为可能会反转head指向的节点
所以需要重新构造一个头节点指向head
防止头节点位置改变

		ListNode* dummy = new ListNode(0);dummy->next = head;

然后for循环先找到left

ListNode* pre = dummy;ListNode* cur=head;ListNode* next=nullptr;for(int i=1;i<=right;i++){if(i<left){pre=pre->next;cur=cur->next;}}

cur节点指向left位置的节点,使用反转链表反转直到cur指向right

ListNode* pre = dummy;ListNode* cur=head;ListNode* next=nullptr;for(int i=1;i<=right;i++){if(left<=i&&right>=i){ListNode* tmp=cur->next;cur->next=next;next=cur;cur=tmp;}else if(i<left){pre=pre->next;cur=cur->next;}}

接着链接头尾和反转链表
pre指向left-1的位置
pre的下一个指针,也就是反转前的left位置,此时,该指针指向反转链表的尾部
因此,将反转链表的尾部指向right+1的位置,也就是cur
让pre指向反转链表头节点,也就是next

		pre->next->next = cur;pre->next = next;

143.重排链表

双指针求中点+双指针反转链表
从开头出发,快指针走两步,慢指针走一步
快指针走到尾巴的时候,慢指针走到中点

		ListNode* left=head;ListNode* right=head;if(head==NULL&&head->next==NULL)return;while(right->next!=NULL&&right->next->next!=NULL){right=right->next;right=right->next;left=left->next;}

在纸上模拟一下寻找的过程,我们就知道链表中无论是偶数个节点还是奇数个节点,left永远指向左半边链表的最后一个节点
接着我们反转后半部分链表,也就是left->next的部分
使用一前一后两个指针
后一个节点指向前一个节点
等节点指向链表尾部,就结束了
不过我们首先也要把前半段节点末尾改成指向NULL

		ListNode* cur=left->next;left->next=NULL;ListNode* pre=NULL;while(cur!=NULL){ListNode* tmp=cur->next;cur->next=pre;pre=cur;cur=tmp;}

两端链表都准备好了,接下来就是合并两个链表
两个指针分别指向两个链表的头节点
挨个合并

cur=pre;pre=head;while(pre!=NULL&&cur!=NULL){ListNode* tmp=pre->next;pre->next=cur;right=cur->next;cur->next=tmp;cur=right;pre=tmp;}

最后得到整个代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:void reorderList(ListNode* head) {ListNode* left=head;ListNode* right=head;if(head==NULL&&head->next==NULL)return;while(right->next!=NULL&&right->next->next!=NULL){right=right->next;right=right->next;left=left->next;}ListNode* cur=left->next;left->next=NULL;ListNode* pre=NULL;while(cur!=NULL){ListNode* tmp=cur->next;cur->next=pre;pre=cur;cur=tmp;}cur=pre;pre=head;while(pre!=NULL&&cur!=NULL){ListNode* tmp=pre->next;pre->next=cur;right=cur->next;cur->next=tmp;cur=right;pre=tmp;}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——二叉树的链式结构

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ 一、二叉树的创建 这里我们使用先序遍历的思想来创建二叉树&#xff0c;这里的内容对于刚接触二…

iClient3D 加载天地图服务

1 对国家天地图&#xff0c;通过TiandituImageryProvider影像服务提供者加载地图&#xff1b; var TiandituimageryLayernew Cesium.TiandituImageryProvider({ mapStyle: Cesium.TiandituMapsStyle[value],token: "4a00a1dc5387b8ed8adba3374bd87e5e"})viewer.imag…

nginx 的概念、高并发处理及详细参数配置

NGINX是一个开源的高性能Web服务器&#xff0c;负载均衡器和反向代理服务器。它特别适用于高并发的Web应用&#xff0c;能够有效地处理数千并发连接&#xff0c;同时具备低资源消耗和高性能的特点。在这里&#xff0c;我将重点介绍NGINX的高并发处理能力和参数配置。 高并发处…

云原生(Cloud Native)——概念,技术,背景,优缺点,实践例子

云原生&#xff08;Cloud Native&#xff09;是一种构建和运行应用程序的方法&#xff0c;这些应用程序充分利用云计算的优势。云原生应用程序通常设计为在现代、动态的环境中运行&#xff0c;如公共云、私有云和混合云。这种方法强调微服务架构、容器化、自动化、易于管理和可…

QT 信号与槽 connect 三种写法

先看下示例&#xff1a; QPushButton *btn new QPushButton;// 方式一&#xff1a;老式写法connect(btn, SIGNAL(clicked()), this, SLOT(close()));// 方式二&#xff1a;Qt5后新写法connect(btn, &QPushButton::clicked, this, &MainWindow::close);// 方式三&#…

Word插件-好用的插件-一键设置字体--大珩助手

常用字体 整理了论文、公文常用字体 整理了常用的论文字体&#xff0c;可一键设置当前节或选择的文字的字体 字体设置 包含字体选择、字体颜色 特殊格式 包含首字下沉、段落分栏、统一宽度、双行合一、上标切换、下标切换、转为全角、转为半角、挖词填空、当前日期、大写金…

LabVIEW开发远程结构健康监测系统

LabVIEW开发远程结构健康监测系统 工程师依赖于振动监测来评估建筑物、桥梁和其他大型结构的完整性。传统的振动监测工具在数据收集上存在限制&#xff0c;无法长时间收集高保真波形。随着内存存储、处理器速度和宽带无线通信技术的进步&#xff0c;出现了对能够长时间收集并实…

Navicat 技术指引 | 适用于 GaussDB 分布式的查询功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

深入了解对象与内置构造函数

1. 深入对象 1.1 创建对象的三种方式 1.2 构造函数 语法约定&#xff1a; 总结 构造函数可以快速创建多个对象大写字母开头的函数使用new关键字将对象实例化构造函数不需要返回值自动返回新的对象 new实例化的执行过程 创建空对象this指向对象执行代码&#xff0c;追加新…

使用wire重构商品微服务

一.wire简介 Wire 是一个轻巧的Golang依赖注入工具。它由Go Cloud团队开发&#xff0c;通过自动生成代码的方式在编译期完成依赖注入。 依赖注入是保持软件 “低耦合、易维护” 的重要设计准则之一。 此准则被广泛应用在各种开发平台之中&#xff0c;有很多与之相关的优秀工…

使用pyftpdlib组件实现FTP文件共享

目录 一、引言 二、技术背景 三、实现逻辑 1、创建FTP服务器&#xff1a; 2、实现文件共享&#xff1a; 3、设置用户权限&#xff1a; 4、处理异常&#xff1a; 5、优化与扩展&#xff1a; 四、代码实现 五、测试与评估 测试用例&#xff1a; 评估方法&#xff1a;…

React/Vue/Svelte 前端项目中开始使用TailwindCSS

背景 TailwindCSS 近年来在前端圈非常流行&#xff0c;它摆脱了原有的CSS限制&#xff0c;以灵活实用为卖点&#xff0c;用户通过各种class组合即可构建出漂亮的用户界面。对于初学者而言&#xff0c;可能需要一些上手成本&#xff0c;一旦掌握实用技巧后&#xff0c;Tailwind…

Unity中Batching优化的GPU实例化整理总结

文章目录 前言一、GPU Instancing的支持1、硬件支持2、Shader支持3、脚本支持 二、我们来顺着理一下GPU实例化的使用步骤1、GPU实例化前的C#代码准备2、在 appdata 和 v2f 中定义GPU实例化ID3、在顶点着色 和 片元着色器 设置GPU Instance ID&#xff0c;使实例化对象顶点位置正…

Docker的资源控制

Docker的资源控制&#xff1a; 对容器使用宿主机的资源进行限制。 CPU 内存 磁盘I/O(读写性能) docker使用linux自带的功能cgroup control groups是linux内核系统提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程组所使用的物理资源的一种机制。 docker借助这个机制…

go grpc高级用法

文章目录 错误处理常规用法进阶用法原理 多路复用元数据负载均衡压缩数据 错误处理 gRPC 一般不在 message 中定义错误。毕竟每个 gRPC 服务本身就带一个 error 的返回值&#xff0c;这是用来传输错误的专用通道。gRPC 中所有的错误返回都应该是 nil 或者 由 status.Status 产…

如何克服微服务测试的挑战,并最大化收益

多年来&#xff0c;微服务一直是行业趋势&#xff0c;但组织却未能从该方法中获益&#xff0c;并因发布失败而苦苦挣扎。这些失败通常归结为测试服务之间的接口以获得预期的质量、安全性和性能的困难。 最终&#xff0c;未能以足够稳健的方式测试这些 API。一线希望是遗留 SOA…

cookie总结

cookie和session&#xff1a; 一、Cookie和Session二、使用Cookie保存用户上次的访问时间。三、Cookie常用方法总结乱码问题解决&#xff1a; 一、Cookie和Session 会话&#xff1a;用户从打开浏览器到关闭的整个过程就叫1次会话。 比如有的网站登录过一次&#xff0c;下次再进…

Gitleaks - 一款高效的Github仓库敏感信息泄露查询工具

Gitleaks - 一款高效的Github仓库敏感信息泄露查询工具 1.工具概述2.安装3.参数解析4.使用1.工具概述 Gitleaks 是一种 SAST 工具,用于检测和防止 git 存储库中的硬编码机密,如密码、API 密钥和令牌 Gitleaks 是一个开源工具,用于检测和防止签入 Git 存储库的机密(密码/A…

使用 Kubernetes 为 CI/CD 流水线打造高效可靠的临时环境

介绍 在不断发展的科技世界中&#xff0c;快速构建高质量的软件至关重要。在真实环境中测试应用程序是及早发现和修复错误的关键。但是&#xff0c;在真实环境中设置 CI/CD 流水线进行测试可能既棘手又昂贵。 Kubernetes 是一个流行的容器编排平台&#xff0c;提供临时环境解决…

【qt】Qt+OpenCv读取带有中文路径的图片

【opencv4.5.1版本】下载exe解压即可。。。https://opencv.org/releases/page/2/ 【qt5.15.2】 pro文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to …