【牛客面试必刷TOP101】Day15.BM2 链表内指定区间反转和BM3 链表中的节点每k个一组翻转

news2024/11/26 13:57:47

作者简介:大家好,我是未央;

博客首页:未央.303

系列专栏:牛客面试必刷TOP101

每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!!

文章目录

前言

一、链表内指定区间反转

题目描述

题目解析

二、链表中的节点每k个一组翻转

题目描述

题目解析

总结



前言

基于链表反转为基础的升级后的算法题目!!!

一、链表内指定区间反转

题目描述

描述:
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。


举例说明:
给出的链表为 1→2→3→4→5→NULL,

m=2,n=4,
返回1→4→3→2→5→NULL。


数据范围: 链表长度 0<size≤1000,0<m≤n≤size,链表中每个节点的值满足∣val∣≤1000

要求:时间复杂度 O(n) ,空间复杂度 O(n)

进阶:时间复杂度 O(n),空间复杂度 O(1)


示例1:


示例2:


题目解析

解题思路:

在学会了BM1.反转链表之后,要解决这个问题就很简单了,前一题是整个链表反转,这一题是部分反转,这上一题就是这道题的前置问题啊。那我们肯定是要先找到了第m个位置才能开始反转链表,而反转的部分就是从第m个位置到第n个位置,反转这部分的时候就参照BM1.反转链表;

while(cur != null){
    //断开链表,要记录后续一个
    ListNode temp = cur.next; 
    //当前的next指向前一个
    cur.next = pre; 
    //前一个更新为当前
    pre = cur; 
    //当前更新为刚刚记录的后一个
    cur = temp; 
}

解题步骤:

  • step 1:我们可以在链表前加一个表头,后续返回时去掉就好了,因为如果要从链表头的位置开始反转,在多了一个表头的情况下就能保证第一个节点永远不会反转,不会到后面去。
  • step 2:使用两个指针,一个指向当前节点,一个指向前序节点。
  • step 3:依次遍历链表,到第m个的位置。
  • step 4:对于从m到n这些个位置的节点,依次断掉指向后续的指针,反转指针方向。
  • step 5:返回时去掉我们添加的表头。

图示过程分析:


代码编写:

二、链表中的节点每k个一组翻转

题目描述

描述:

将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表;

如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样;

注意:你不能更改节点中的值,只能更改节点本身。


数据范围:  0≤n≤2000 , 1≤k≤2000 ,链表中每个元素都满足 0≤val≤1000;
要求空间复杂度 O(1),时间复杂度 O(n)


举例说明:

给定的链表是 1→2→3→4→5;

对于 k=2 , 你应该返回 2→1→4→3→5;

对于 k=3 , 你应该返回 3→2→1→4→5;


示例1:


示例2:


题目解析

解题思路:

方法:递归(推荐使用)

现在我们想一想,如果拿到一个链表,想要像上述一样分组翻转应该做些什么?首先肯定是分段吧,至少我们要先分成一组一组,才能够在组内翻转,之后就是组内翻转,最后是将反转后的分组连接。


但是连接的时候遇到问题了:首先如果能够翻转,链表第一个元素一定是第一组,它翻转之后就跑到后面去了,而第一组的末尾元素才是新的链表首,我们要返回的也是这个元素,而原本的链表首要连接下一组翻转后的头部,即翻转前的尾部,如果不建立新的链表,看起来就会非常难。但是如果我们从最后的一个组开始翻转,得到了最后一个组的链表首,是不是可以直接连在倒数第二个组翻转后的尾(即翻转前的头)后面,这样从后往前是不是看起来就容易多了。


怎样从后往前呢?我们这时候可以用到自上而下再自下而上的递归或者说栈。接下来我们说说为什么能用递归?如果这个链表有n个分组可以反转,我们首先对第一个分组反转,那么是不是接下来将剩余n−1个分组反转后的结果接在第一组后面就行了,那这剩余的n−1组就是一个子问题。我们来看看递归的三段式模版:

  • 终止条件: 当进行到最后一个分组,即不足k次遍历到链表尾(0次也算),就将剩余的部分直接返回。
  • 返回值: 每一级要返回的就是翻转后的这一分组的头,以及连接好它后面所有翻转好的分组链表。
  • 本级任务: 对于每个子问题,先遍历k次,找到该组结尾在哪里,然后从这一组开头遍历到结尾,依次翻转,结尾就可以作为下一个分组的开头,而先前指向开头的元素已经跑到了这一分组的最后,可以用它来连接它后面的子问题,即后面分组的头。

解题步骤:

  • step 1:每次从进入函数的头节点优先遍历链表k次,分出一组,若是后续不足k个节点,不用反转直接返回头。
  • step 2:从进入函数的头节点开始,依次反转接下来的一组链表,反转过程同BM1.反转链表。
  • step 3:这一组经过反转后,原来的头变成了尾,后面接下一组的反转结果,下一组采用上述递归继续。

图示过程解析:


代码编写:

总结

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

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

相关文章

虹科 | 解决方案 | 虹科Pico振动异响(NVH)诊断方案

车辆行驶过程中的偶发性异响&#xff08;比如经过颠簸路面时的吱嘎声&#xff09;和某一特定车速/转速下持续/周期性出现的异响&#xff0c;要将故障重现并定位故障点&#xff0c;对维持技师来讲是个重大的挑战。传统的测试方法是使用底盘听诊器&#xff0c;车辆一边在路上跑&a…

常用的Git命令清单

文章目录 前言配置相关创建新库最简单的方式&#xff1a;命令行表示 提交代码查看状态增加删除分支相关远程协调恢复撤销发标签啦发布打包 前言 提示&#xff1a;承诺&#xff0c;只是大声说出来的愿望。 --《不情愿的照护》 了解Git这个图一定不陌生吧&#xff01;&#x1f97…

网络安全入门教程(非常详细)从零基础入门到精通

网络安全是一个庞大而不断发展的领域&#xff0c;它包含多个专业领域&#xff0c;如网络防御、网络攻击、数据加密等。介绍网络安全的基本概念、技术和工具&#xff0c;逐步深入&#xff0c;帮助您成为一名合格的网络安全从业人员。 一、网络安全基础知识 1.计算机基础知识 …

解决JPA报错问题

我们在使用JPA做开发时可能会遇到下面的报错。 这可能是你JPA版本问题&#xff0c;可以到pom.xml中看看JPA版本。 注意&#xff0c;我这里使用的SpringBoot版本是2.7.16&#xff0c;但是我的JPA版本却是3.1.4&#xff0c;所以会报上面的错误。 这里需要JPA依赖坐标中的版本去掉…

各种jdk的区别

openjdk 所有 jdk 的祖先&#xff0c;遵循 GPL 协议。 oracle jdk 在 openjdk 的基础上&#xff0c;添加了一些商用的功能。作为商用版本&#xff0c;许可证为 OTN。 各个版本的支持日期之前自己写了一篇文章 jdk 21发布的意义 虚拟线程_zlpzlpzyd的博客-CSDN博客 其他开源j…

【GA-ACO-BP预测】基于混合遗传算法-蚁群算法优化BP神经网络回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作

Spring实战系列文章&#xff1a; Spring实战 | Spring AOP核心秘笈之葵花宝典 Spring实战 | Spring IOC不能说的秘密&#xff1f; 国庆中秋特辑系列文章&#xff1a; 国庆中秋特辑&#xff08;八&#xff09;Spring Boot项目如何使用JPA 国庆中秋特辑&#xff08;七&#…

8.19PMP考试成绩已出!(附查询流程)

之前胖圆给大家分享过&#xff0c;10月16号PMI官网将发布8.19的PMP考试成绩&#xff0c;这两天已经有学员陆陆续续收到考试通过的邮件&#xff0c;还没有收到成绩通知的学员耐心等待&#xff0c;相信努力备考的学员一定都能够顺利通过~ 还没查成绩的宝子们&#xff0c;下面是成…

英飞凌助攻马自达最新增程序电动车接入富田电机七合一驱动系统 | 百能云芯

在面对气候变迁的挑战下&#xff0c;全球汽车产业正积极迈向电气化转型&#xff0c;这一趋势也为台企厂商带来了巨大的商机&#xff0c;莫不积极发展布局电动车市场。全球半导体领导厂商英飞凌科技股份有限公司凭借其全面性的车用系统解决方案&#xff0c;助力富田电机股份有限…

通过商品链接查询天猫商品详情数据,可以拿到商品标题,商品价格,商品库存,商品销量,商品sku数据等,天猫API接口

要通过商品链接查询天猫商品详情数据&#xff0c;可以使用淘宝开放平台的接口查询商品详情。具体步骤如下&#xff1a; 注册并获取App Key和App Secret。使用淘宝开放平台的淘宝客商品详情查询接口&#xff08;taobao.tbk.item.info.get&#xff09;&#xff0c;传入商品链接&…

Chrome使用本地修改过的js替换原js内容

步骤 1.进入开发人员工具&#xff1a;按F12 或 按ctrlshitfi 或 菜单“更多工具”->“开发人员工具” 2.在“源代码/来源”页面找到需要更改的js文件&#xff0c;“右键”->“替换内容” 3.在弹出的标签点击“选择文件夹”来选择一个存放内容的本地文件夹 4.弹出的询问标…

塑料为什么需要透光率检测?

塑料透光率是指塑料材料对光线的透明程度&#xff0c;是衡量其光学性能的重要指标之一。在实际应用中&#xff0c;塑料透光率的高低对于不同领域具有不同的意义。进行塑料检测可以确保塑料制品的质量和安全性能&#xff0c;对于塑料制造行业来说具有至关重要的意义。 1.建筑领域…

中国医疗器械在“一带一路”国家贸易状况及贡献度分析

完整下载链接&#xff01;https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247548624&idx1&snebe429303ee354e94d3a39ba9df76973&chksmfcfb2d07cb8ca41126a40ff04628dc2edc278e9514984d713e0e9edf6113655ac23c2fb56db5&token87782696&langzh_CN#…

LDAP用户密码自服务平台搭建

源码地址&#xff1a;https://github.com/ltb-project/self-service-password 官方文档 &#xff1a;https://self-service-password.readthedocs.io/en/latest/ 1.创建配置文件 mkdir -p /opt/ssp cd /opt/ssp vim ssp.conf.php2.在ssp.conf.php其中输入如下配置选项&#…

【17.19消失的两个数字】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:vector<int> missingTwo(vector<int>& nums) {//找到a^bint temp0;for(auto num:nums){temp^num;}for(int i1;i<nums.size()2;i){temp^i;}//找…

OCP Java17 SE Developers 复习题06

答案 答案 E. Options A and B will not compile because constructors cannot be called without new. Options C and D will compile but will create a new object rather than setting the fields in this one. The result is the program will print 0, not 2, at run…

E114-经典赛题-操作系统服务端口扫描渗透测试

任务实施: E114-经典赛题-操作系统服务端口扫描渗透测试 任务环境说明&#xff1a; 服务器场景&#xff1a;p9_bt5-1&#xff08;用户名&#xff1a;root&#xff1b;密码&#xff1a;toor&#xff09; 服务器场景操作系统&#xff1a;Back Track five 192.168.1.120 服务…

【LeetCode刷题(数据结构与算法)】:验证二叉树的前序序列化

序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&#xff0c;我们可以使用一个标记值记录&#xff0c;例如 # 例如&#xff0c;上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#…

Eclipse使用教程

一、前期准备 JDK环境变量得配置好&#xff08;java需要先安装好&#xff09; 【下载Eclipse解压包&#xff0c;可选择去Eclipse官网下载】 Eclipse的安装方式&#xff1a; 下载后解压直接点击进入选择工作区间就可运行 二、Eclipse基本概述&#xff1a; 工作区&#xff08;w…

2023年全国职业院校技能大赛软件测试赛题第10套

2023年全国职业院校技能大赛 软件测试赛题第10套 目录 任务一 环境搭建及系统部署 任务二 单元测试 任务三 测试文档 任务四 功能测试 任务五 自动化测试 任务六 性能测试 任务七 接口测试 有问题可私信我 赛项名称&#xff1a; 软件测试 英文名称&…