206. 反转链表 92. 反转链表 II 25. K 个一组翻转链表

leetcode Hot 100系列

文章目录

  • 一、翻转链表
  • 二、反转链表 II
  • 三、K 个一组翻转链表
  • 总结


一、翻转链表

  1. 建立pre为空,建立cur为head,开始循环:先保存cur的next的值,再将cur的next置为pre,将pre前进到cur的位置,再将cur往前进一步(利用刚刚保存的值),直到cur为nullptr

代码如下:

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* cur=head;ListNode* pre=nullptr;while (cur!=nullptr){ListNode* temp=cur->next;cur->next=pre;pre=cur;cur=temp;}return pre; }
};

提示:小白个人理解,如有错误敬请谅解!

二、反转链表 II

  1. 这个和上面的区别就是从left开始,为了防止left为head,这样就没有p0了,所以要加入dummyhead,并且将dummyhead和head连起来
  2. 先要找到left位置的前一个作为p0,然后继续上面的操作,初始化pre为空,cur为p0的next,然后开始循环(循环的次数就是要翻转的个数):先保存cur的next位置,再将cur的next指向pre,随后pre到cur的位置,最后cur到之前保存的cur的next位置上,循环结束了之后,将p0的next的next指向cur,再才能将p0的next指向pre(如果这两个顺序反了,那由于先改变了p0的next的位置,再修改p0的next的next的时候,指向的位置就已经变了)
    代码如下:
class Solution {
public:ListNode* reverseBetween(ListNode* head, int left, int right) {ListNode* dummyhead=new ListNode(0);dummyhead->next=head;ListNode* p0=dummyhead;int m=left;m--;while (m--){   p0=p0->next;}ListNode* pre=nullptr;ListNode* cur=p0->next;int n=right-left+1;while (n--){ListNode* temp=cur->next;cur->next=pre;pre=cur;cur=temp;}p0->next->next=cur;p0->next=pre;return dummyhead->next;}
};

三、K 个一组翻转链表

  1. 设置dummyhead,并且令p0为dummyhead,这样p0才是要翻转的链表的前一个
  2. 由于k组翻转链表,所以要先统计一下一共有多少个,每次循环(翻转了k个链表)就将这个总数减k,然后看剩下的值到不到k,如果到了才能继续进行循环
  3. 设置pre为空,cur为p0的next,开始小循环,最后结束之后,先要保存一下p0的next作为下一个要翻转的链表的p0,然后再继续之前的操作,将p0的next的next置为cur,再将p0的next置为pre,最后将p0设置为之前保存的p0的next值,由下图中可知对于下一组k的链表来说,他们的p0应该是 1 这个节点,也就是最开始保存的保存的p0的next

    图源@灵茶山艾府
  4. 返回dummyhead的next
    代码如下:
class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode* dummyhead=new ListNode(0);dummyhead->next=head;ListNode* curr=head;int count=0;while (curr!=nullptr){curr=curr->next;count++;}ListNode* p0=dummyhead;while (count>=k){   count-=k;ListNode* pre=nullptr;ListNode* cur=p0->next;int m=k;while (m--){ListNode* temp=cur->next;cur->next=pre;pre=cur;cur=temp;}ListNode* nxt=p0->next;p0->next->next=cur;p0->next=pre;p0=nxt;}return dummyhead->next;}
};

总结

  1. pre统一设置为空,cur设置为p0的next,使用临时变量接受cur的next,最后要更新p0的位置!

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

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

相关文章

【区块链安全 | 第十七篇】类型之引用类型(一)

文章目录 引用类型数据存储位置分配行为 数组特殊数组:bytes 和 string 类型bytes.concat 和 string.concat 的功能分配 memory 数组数组字面量(Array Literals)二维数组字面量数组成员(Array Members)悬空引用&#x…

selenium和pytessarct提取古诗文网的验证码(python爬虫)

代码实现的主要功能: 浏览器自动化控制 验证码图像获取与处理 OCR验证码识别 表单自动填写与提交 登录状态验证 异常处理与资源清理 1. 浏览器初始化与页面加载 driver webdriver.Chrome() driver.get("https://www.gushiwen.cn/user/login.aspx?fro…

【输入某年某日,判断这是这一年的第几天】

for语句和switch语句分别实现 文章目录 前言 一、用switch做 二、用for循环做 ​编辑 总结 前言 用两种不同的方法求解【输入某年某日,判断这是这一年的第几天】 一、用switch做 代码如下(示例): int main() {int y, m, d, cou…

香港理工视觉语言模型赋能智能制造最新综述!基于视觉语言模型的人机协作在智能制造中的应用

作者:Junming FAN 1 ^{1} 1, Yue YIN 1 ^{1} 1, Tian WANG 1 ^{1} 1, Wenhang DONG 1 ^{1} 1, Pai ZHENG 1 ^{1} 1, Lihui WANG 2 ^{2} 2单位: 1 ^{1} 1香港理工大学工业及系统工程系, 2 ^{2} 2瑞典皇家理工学院论文标题: Vision-…

大智慧前端面试题及参考答案

如何实现水平垂直居中? 在前端开发中,实现元素的水平垂直居中是一个常见的需求,以下是几种常见的实现方式: 使用绝对定位和负边距:将元素的position设置为absolute,然后通过top、left属性将其定位到父元素的中心位置,再使用负的margin值来调整元素自身的偏移,使其水平垂…

算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】

算法基础_基础算法【高精度 前缀和 差分 双指针】 ---------------高精度---------------791.高精度加法题目介绍方法一:代码片段解释片段一: 解题思路分析 792. 高精度减法题目介绍方法一:代码片段解释片段一: 解题思路分析 7…

OkHttpHttpClient

学习链接 okhttp github okhttp官方使用文档 SpringBoot 整合okHttp okhttp3用法 Java中常用的HTTP客户端库:OkHttp和HttpClient(包含请求示例代码) 深入浅出 OkHttp 源码解析及应用实践 httpcomponents-client github apache httpclie…

DoDAF科普

摘要 DoDAF(Department of Defense Architecture Framework,美国国防部架构框架)是一种专门为复杂系统设计的标准化框架,广泛应用于军事和国防项目。它通过提供一致的架构描述方法,确保跨组织、跨国界的系统集成和互操…

搭建qemu环境

1.安装qemu apt install qemu-system2.编译内核 设置gcc软链接sudo ln -s arm-linux-gnueabihf-gcc arm-linux-gccsudo ln -s arm-linux-gnueabihf-ld arm-linux-ldsudo ln -s arm-linux-gnueabihf-nm arm-linux-nmsudo ln -s arm-linux-gnueabihf-objcopy arm-linux-objc…

使用Claude Desktop和MCP工具创建个人编程助手

最近我在Claude Desktop上试用了MCP工具,体验过程令人兴奋不已。 我花时间测试了多个用于编程场景的MCP服务器——而Claude本就擅长编程,这一组合可谓相得益彰。 这些工具赋予Claude强大的自主任务执行能力,比如仅通过聊天就能实现Vibe编程。当然,必须谨慎控制其访问权限…

K8S集群搭建 龙蜥8.9 Dashboard部署(2025年四月最新)

一、版本兼容性和服务器规划 组件版本/配置信息备注操作系统Anolis OS 8.9基于 Linux 5.10.134-17.3.an8.x86_64内核版本Linux 5.10.134-17.3.an8.x86_64与 Kubernetes 1.29 兼容架构x86-64Kubernetes 版本v1.29.5最新稳定版,兼容 Linux 5.10 内核Docker 版本24.0.…

项目6——前后端互通的点餐项目

一、项目介绍 1、有哪些需求需要连接后台完成功能? 前台传给后台 后台返回给前台 注册: 用户名 密码 操作是否成功 登录: 用户名 密码 操作是否成功 下单: 用户名 菜名 操作是否成功 Request : 前端发送给后台的所有数据的载体 Res…

Go和Golang语言简介

李升伟 整理 Go 和 Golang 实际上指的是同一种编程语言,只是名称不同。 Go 名称:Go 是该编程语言的正式名称。 起源:由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 于 2007 年开始设计,2009 年正式发布。 设计目…

GitHub二次验证登录2FA(Enable two-factor authentication )

不用下载app&#xff0c;点击二维码下面的setup key获取到secret并且保存好 接下来几行代码就可以解析了。 添加依赖 <dependency><groupId>com.amdelamar</groupId><artifactId>jotp</artifactId><version>1.3.0</version> </d…

RabbitMQ技术方案分析

方案分析 在上一篇文档中&#xff0c;详细讲述了如何通过CanalMQ实现对分库分表的数据库和数据表进行数据同步&#xff0c;而在这个方案中&#xff0c;还有一个关键点是需要注意的&#xff1a;首先&#xff0c;数据增删改的信息是保证写入binlog的&#xff0c;Canal解析出增删…

node.js版本管理

概述 遇到了版本升级后&#xff0c;以前项目不兼容的问题。 下载一个node.js的版本管理工具&#xff0c;官网下载地址&#xff0c;可以选择版本下载&#xff0c;我选择的1.11.1版本的。下载完成后点击安装&#xff0c;分别选择nvm安装目录和nodejs的安装目录&#xff0c;点击安…

leetcode-热题100(3)

leetcode-74-搜索二维矩阵 矩阵最后一列升序排序&#xff0c;在最后一列中查找第一个大于等于target的元素 然后在该元素所在行进行二分查找 bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int n matrixSize;int m matrixColSize[0];in…

在HarmonyOS NEXT 开发中,如何指定一个号码,拉起系统拨号页面

大家好&#xff0c;我是 V 哥。 《鸿蒙 HarmonyOS 开发之路 卷1 ArkTS篇》已经出版上市了哈&#xff0c;有需要的朋友可以关注一下&#xff0c;卷2应用开发篇也马上要出版了&#xff0c;V 哥正在紧锣密鼓的写鸿蒙开发实战卷3的教材&#xff0c;卷3主要以项目实战为主&#xff0…

音视频入门基础:MPEG2-TS专题(26)——通过FFmpeg命令使用RTP发送TS流

音视频入门基础&#xff1a;MPEG2-TS专题系列文章&#xff1a; 音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;1&#xff09;——MPEG2-TS官方文档下载 音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;2&#xff09;——使用FFmpeg命令生成ts文件 音视频入门基础…

(六)窗口表面

这节主要三部分 一&#xff0c;窗口表面的创建和销毁 二&#xff0c;呈现队列 三&#xff0c;与以前实现的图形能力队列的兼容 一&#xff0c;窗口表面 1&#xff0c;创建 VkSurfaceKHR surface; //创建窗口表面 glfwCreateWindowSurface(instance, //vkInstance对象window, …