【算法萌新闯力扣】:旋转链表

news2024/9/24 9:19:58

    力扣题目:旋转链表

开篇

  今天是备战蓝桥杯的第25天和算法村开营第3天!经过这3天的学习,感觉自己对链表的掌握程度大大地提升,尤其是在帮村里的同学讨论相关问题时。本篇文章,给大家带来一道旋转链表的题目,用到了巧妙的快慢指针方法!

题目链接: 61.旋转链表

题目描述


在这里插入图片描述

代码思路

 先用双指针策略找到倒数K的位置,也就是{1,2,3}和{4,5}两个序列,之后再将两个链表拼接成{4,5,1,2,3}就行了。具体思路是:
因为k有可能大于链表长度,所以首先获取一下链表长度,如果然后计算应该反转多少次,0次则直接返回原链表。然后
1.快指针先走与反转次数相同的步。
2.慢指针和快指针一起走。
3.快指针走到链表尾部时,慢指针所在位置刚好是要断开的地方。把快指针指向的节点连到原链表头部,慢指针指向的节点断开和下一节点的联系。
4.返回结束时慢指针指向节点的下一节点。

代码纯享版

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if(head == null || k == 0) return head;
        ListNode fast = head, slow = head;
        int sum = 0;
        ListNode test = head;
        while(test != null){
            sum++;
            test = test.next;
        }
        if(k % sum == 0)return  head;
        int len = k % sum;
        while(len > 0){
            fast = fast.next;
            len--;
        }
        while(fast.next != null){
            fast = fast.next;
            slow = slow.next;
        }
        ListNode newhead = slow.next;
        slow.next = null;
        fast.next = head;

        return newhead;
    }
}

代码逐行解析版

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if(head == null || k == 0) return head; //排除特殊情况,如果不排除,下面的k%sum中会出现sum==0的报错
        ListNode fast = head, slow = head; //创建快慢指针
        int sum = 0; 
        ListNode test = head; 
        while(test != null){ //利用test来遍历整个链表
            sum++; //sum统计链表的长度
            test = test.next;
        }
        if(k % sum == 0)return  head; //k是sum的整数倍,反转完结果与原链表相同,直接返回原链表
        int len = k % sum; //计算出最终要分开的节点
        while(len > 0){ //先让快指针领先慢指针len个结点
            fast = fast.next; 
            len--;
        }
        while(fast.next != null){ //两个指针同时移动,当快指针到尾结点时,慢指针到达分开的位置
            fast = fast.next;
            slow = slow.next;
        }
        ListNode newhead = slow.next; //三步操作,让慢指针后面的部分拼接到头结点
        slow.next = null;
        fast.next = head;

        return newhead; //此时原本慢指针到下一个结点变成头结点,返回它
    }
}

其他解法

1.第一种是将整个链表反转,如实例1中,把链表变成{5,4,3,2,1},然后再将前K和N-K两个部分分别反转,也就是分别变成了{4,5}和{1,2,3}这样就轻松解决了。

2.力扣官方题解提供了先将链表闭合为环,然后寻找合适的位置断开的解法

class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        if (k == 0 || head == nullptr || head->next == nullptr) {
            return head;
        }
        int n = 1;
        ListNode* iter = head;
        while (iter->next != nullptr) {
            iter = iter->next;
            n++;
        }
        int add = n - k % n;
        if (add == n) {
            return head;
        }
        iter->next = head;
        while (add--) {
            iter = iter->next;
        }
        ListNode* ret = iter->next;
        iter->next = nullptr;
        return ret;
    }
};

结语

  如果这道题的分享对您有所帮助,点个关注,为会每天更新力扣题的分享,与大伙儿一同进步!

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

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

相关文章

【VROC】看Intel VROC如何给NVMe SSD做RAID

在当今对硬盘性能要求越来越高的环境中,SATA和SAS接口由于自身的限制,其性能很难突破600MiB/s的瓶颈。因此,对于需要更高底层硬件性能的行业,如数据库等,对NVMe盘的需求越来越迫切。然而,NVMe盘直通到CPU&a…

2005-2022年全球各国经济距离数据

2005-2022年全球各国经济制度距离数据 1、时间:2005-2022年 2、指标:国家、年份、经济距离1(根据美国传统基金会世界经济自由度指数整理)、经济距离2(参考(Kogut&Singh,1988)构建经济制度距离) 3、范…

dst-admin饥荒管理后台 RCE漏洞复现(CVE-2023-0646、CVE-2023-0647、CVE-2023-0649)

0x01 产品简介 dst-admin饥荒管理后台是qinming99个人开发者的一个用 Java 语言编写的 web 程序。 0x02 漏洞概述 dst-admin饥荒管理后台kickPlayer、cavesConsole、sendBroadcast等接口处配置不当,导致破解口令后的攻击者可以进行命令注入,获取服务器权…

第五节HarmonyOS ArkTS声明式开发范式

ArkTS声明式开发范式: 规范中各个内容说明如下: 装饰器 1、基本UI装饰器Entry、Component Entry 装饰struct,页面的入口。 Component 装饰struct,表示该struct具有基于组件的能力。 2、数据装饰器State、Prop、Link State…

【ShardingSphere专题】SpringBoot整合ShardingSphere(一、数据分片入门及实验)

目录 前言阅读对象笔记正文一、ShardingSphere介绍1.1 ShardingSphere-JDBC:代码级别1.2 ShardingSphere-Proxy:应用级别1.3 横向对比图 二、ShardingSphere之——数据分片2.1 基本介绍2.2 分片的形式2.2.1 垂直分片2.2.2 水平分片 2.3 数据分片核心概念…

Python实现性能自动化测试

一、思考❓❔ 1.什么是性能自动化测试? 性能 系统负载能力超负荷运行下的稳定性系统瓶颈自动化测试 使用程序代替手工提升测试效率性能自动化 使用代码模拟大批量用户让用户并发请求多页面多用户并发请求采集参数,统计系统负载能力生成报告 2.Python中的性能自动…

代码随想录算法训练营 ---第四十九天

前言: 今天是买卖股票的最佳时机系列,本系列之前在学习贪心思想时做过一些。 第一题: 简介: 本题在读题时我们要注意到几个细节 1.本题股票买卖只有一次。2.我们要在最低点买股票,在最高点卖股票。 我的思路&#…

基于Java SSM框架+Vue实现药品保健品购物网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现药品保健品购物网站演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 ssm药源购物网站,主要的模块包括两个用户,管理员权限:用…

C++初阶--String类的使用

string类 在C语言中,我们总是用char* 的类型来创建一个变量,存储一个字符串;当我们想对它进行修改或者读写时,需要自我创建空间和使用string.h的库函数来进行操作它; 而在C中,C专门提供了一个头文件 stri…

揭秘论文开题报告写作技巧,全程无忧,附赠技术路线图模板!

最近不少学校开始让准毕业生撰写论文开题报告,如果是第一次接触学术论文的朋友,多少会卡在概念的理解上,就像题主说到的,开题报告中包含的各个部分,如研究目的、研究目标、研究内容等,容易让人眼花缭乱。 …

ChatGPT到底是如何运作?

自从2022年11月30日发布以来,ChatGPT一直占据着科技届的头条位置,随着苹果的创新能力下降,ChatGPT不断给大家带来震撼,2023年11月7日,首届OpenAI开发者大会在洛杉矶举行,业界普遍认为,OpenAI的开…

2021年12月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共15题,每题2分,共30分) 第1题 下图两个积木的值分别是? A:false true B:false false C:true true D:true false 答案:A 第2题 小猫和小狗是非常好的朋友,他们发明了一种加密方法:用两位数字代表字母。…

【Linux进阶之路】进程间通信

文章目录 一、原理二、方式1.管道1.1匿名管道1.1.1通信原理1.1.2接口使用 1.2命名管道 2.共享内存2.1原理2.2接口使用 3.消息队列原理 4.信号量引入原理 总结 一、原理 进程间的通信是什么?解释: 简单理解就是,不同进程之间进行数据的输入输出…

python之pyqt专栏7-信号与槽3

在上一篇文章中python之pyqt专栏6-信号与槽2-CSDN博客中,我们可以了解到对象可以使用内置信号,这些信号来自于类定义或者继承过来的。我们可以对这些信号可以通过connect连接槽函数。 需求 现在有一个需求,有两个UI界面“untitled.ui”和“u…

微信小程序开发——项目开发入门

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 本文重点介绍微信小程序开发者工具的下载与安装与项目开发入门。 下载开发者工具 请在官方网站下载微信小程序开发工具;图示如下: 请依据实际…

基于mvc的大学生家教信息网站系统php+vue

运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp5 前端框架:vue.js 服务器:apache 数据库:mysql 数据库工具:Navicat/phpmyadmin 开发软件:hbuilderx/vscode/Dreamweaver/PhpSt…

[SaaS] 淘宝AI淘淘秀

AIGC技术在淘淘秀场景的探索与实践关键词:图像类AI创新应用、用户轻松创作、内容分享、结合商家品牌。https://mp.weixin.qq.com/s/-3a3_nKeKGON-9-Prd7JKQ 1.生成模版 利用定制的prompt,生成一些比较好的素材图片案例。 最终的用的是通义万相。 2.仿…

不会代码也能拿高薪?掌握面试法宝,轻松10000+

快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由 C.A.R.Hoare 在 1962 年提出。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后…

基于springBoot+mysql实现的竞赛管理系统

基于springBootmysql实现的竞赛管理系统,演示地址:系统登录 - 软件学院比赛管理系统 管理员账号:1,密码:1 包括比赛管理,队伍管理,教师管理,经费管理,学生管理,比赛结果,…

《2023全球隐私计算报告》正式发布!

2023全球隐私计算报告 1、2023全球隐私计算图谱2、国内外隐私计算相关政策3、隐私计算技术的最新发展4、隐私计算技术的合规挑战5、隐私计算的应用市场动态6、隐私计算开源整体趋势7、隐私计算的未来趋势 11月23日,由浙江省人民政府、商务部共同主办,杭州…