力扣经典面试题-旋转链表(Java)

 1.题目描述:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例 1: 

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

 示例 2:

输入:head = [0,1,2], k = 4
输出:[2,0,1]

解题思路

具体来说,我把这道题拆解成了四个关键的步骤。这道题我的大致的理解就是把需要旋转的节点通过头插法放到链表头。

1.获取链表的长度

第一个步骤就是测量链表的长度,举个很简单的例子。比如说我们的链表是[0,1,2],而k =1那么就是把2这个链表元素旋转到表头那里。那么肯定是要得到链表的长度然后才能找到最后一个元素。然后我们把最后一个元素头插到链表头那里去。于是我们的链表就变成[2,0,1]了。这是其中的一个步骤,整体上也要使用这个思路来解题。

2.计算需要旋转的次数

上面只是说了一个小步骤,但是其实我们这个题需要当成整体来解。什么意思呢,就像第一个例子那样输入:head = [1,2,3,4,5], k = 2那就是旋转两次,那么就是先把5旋转到链表头那里,然后再把4旋转到链表头那里,所以是旋转两次。而且k有可能大于链表的长度,因此有可能需要取模操作。

3.找到需要分割的位置

循环遍历到需要分割的位置,在这里把链表一刀两断,然后重新拼接到链表头。

4.分割链表之后重新连接

这个其实就是我说的头插法,把旋转的链表放到链表头那里。

5.算法的实现(Java)

class Solution {public ListNode rotateRight(ListNode head, int k) {if (head == null || head.next == null)return head;ListNode cur = head;// 1. 先找到链表的长度int length = 0;while (cur != null) {length++;cur = cur.next;}// 2. 计算需要旋转的次数k = k % length;if (k == 0) {return head;}// 3. 找到需要分割的位置cur = head;for (int i = 0; i < length - k - 1; i++) {cur = cur.next;}//找到旋转位置的前一个位置// 4. 分割链表并重新连接//新的头节点在cur的下一个位置,就是cur之后的节点都要头插法头插到头节点那里去。ListNode newHead = cur.next;//既然要使用头插法,我们平时一个节点的话很好说,直接尾插就行,但是这是一堆节点,所以就得找到最后一个节点//找到最后一个节点然后才能头插ListNode tail = newHead;cur.next = null;while (tail.next != null) {tail = tail.next;//尾节点遍历到newHead的最后一个节点}tail.next = head;//头插法return newHead;}
}

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

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

相关文章

python数据分析-连云港石化基地2023年用电量分析

接下来对连云港石化基地2023年用电量进行分析&#xff0c;首先导入数据分析基本的包&#xff1a; import pandas as pd import matplotlib.pyplot as plt# Load the data from the provided Excel files file_path1 data1.xlsx file_path2 data2.xlsxdata1 pd.read_excel(f…

设计模式之观察者模式ObserverPattern(十一)

一、概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#xff0c;又被称为发布-订阅 (Publish/Subscribe) 模式&#xff0c;它定义了对象之间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会自动收到通知并更新…

Leetcode 力扣109. 有序链表转换二叉搜索树 (抖音号:708231408)

给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它表示所示的高…

C++11 列表初始化(initializer_list),pair

1. {} 初始化 C98 中&#xff0c;允许使用 {} 对数组进行初始化。 int arr[3] { 0, 1, 2 };C11 扩大了 {} 初始化 的使用范围&#xff0c;使其可用于所有内置类型和自定义类型。 struct Date {int _year;int _month;int _day;Date(int year, int month, int day):_year(year…

【MySQL】(基础篇二) —— MySQL初始用

MySQL初始用 目录 MySQL初始用基本语法约定选择数据库查看数据库和表其它的SHOW 在Navicat中&#xff0c;大部分数据库管理相关的操作都可以通过图形界面完成&#xff0c;这个很简单&#xff0c;大家可以自行探索。虽然Navicat等图形化数据库管理工具为操作和管理数据库提供了非…

微信小程序 导航navigation-bar

属性类型默认值必填说明最低版本titlestring否导航条标题2.9.0loadingbooleanfalse否是否在导航条显示 loading 加载提示2.9.0front-colorstring否导航条前景颜色值&#xff0c;包括按钮、标题、状态栏的颜色&#xff0c;仅支持 #ffffff 和 #0000002.9.0background-colorstring…

微信机器人实现OCR识别录入数据

介绍 采用微信的hook插件&#xff0c;然后解析微信发来的数据图片&#xff0c;通过ocr识别 然后将数据落入execl表格中。同时有权限的人可以导出数据表格即可。 流程图 代码片 文本消息处理流程_robot.py elif msg.type 0x01: # 文本消息# 管理员列表dba_user_list [wxid_…

关于Latitude5490的问题Bios引导问题

关于Latitude5490的问题Bios引导问题 一、问题描述1、第一次维修&#xff1a;2、第二次维修&#xff1a; 二、捣鼓过程1、Latitude 5490的Bios引导2、捣鼓硬盘分区格式3、使用PE修复引导4、处理方法 三、参考链接 一、问题描述 本人原本电脑型号为Latitude 5480&#xff0c;电…

Git:从配置到合并冲突

目录 1.前言 2.Git的下载与初始化配置 3.Git中新建仓库 4.Git的工作区域和文件状态 5.Git中查看操作和提交记录 6.Git中添加和提交文件 7.Git中回退提交版本 8.Git中查看版本间的差异 9.Git中删除文件 10.Git中忽略指定文件 11.Git中配置SSH密钥 12.Git中关联克隆仓库 13.Git中…

Windwos下运行程序如何不弹出黑窗口(控制台窗口)

一、在程序最开始处加一句&#xff1a; #pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup") 二、在CMakeLists.txt里面加上WIN32

【教学类-40-01】20240607类似MJ的免费AI绘画工具——文心一格与通义万相

背景需求&#xff1a; 风变的AI对话大师一年到期了&#xff0c;也没有看到续费的按钮。不能使用它写代码了。 MJ早就用完了&#xff0c;最后480次&#xff0c;我担心信息课题会用到它生图&#xff0c;所以不敢用。 最近探索其他类似MJ的免费出图工具 一、文心一格&#xff08;…

windows10使用触控板、鼠标(magic trackpad)———附带BootCamp6驱动下载链接

文章目录 0 背景1 步骤1.1 下载1.2 解压1.3 安装驱动 参考 0 背景 最近在台式机&#xff08;windows10系统&#xff09;上使用mac设备&#xff0c;键盘magic keybord连上数据线就可以直接使用&#xff0c;但是触控板magic trackpad却不行&#xff0c;只有鼠标左键&#xff0c;…

每日一题——Python实现PAT甲级1077 Kuchiguse(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方案1&#x…

CloudFlare 防火墙规则里开放合法 Bot 爬虫的方法

明月使用 CloudFlare 也算是有一阵子了,可以说效果非常好更是非常满意,毕竟每天成千上万的 Web 攻击和 cc 攻击都能控制在几乎可以忽略不计的程度了,上次因调试需要关闭了国内线路上的网站卫士统计图覆对比就很能说明这点儿: 这是关闭防火墙当天的实时防御统计结果 这是开启…

刘强东的拼搏哲学与产品创新的启示

在当今这个快速变化的时代&#xff0c;成功不再是偶然&#xff0c;而是需要一种敢于挑战、敢于拼搏的精神。正如京东创始人刘强东所说&#xff1a;“实现梦想&#xff0c;记住这句话就够了。敢于挑战&#xff0c;敢于拼搏的人不一定能成功&#xff0c;但成功的人一定是敢于挑战…

unity3d:GameFramework+xLua+Protobuf+lua-protobuf,生成.cs,.pb工具流

概述 1.区分lua&#xff0c;cs用的proto 2.proto生成cs&#xff0c;使用protogen.exe&#xff0c;通过csharp.xslt修改生成cs样式 3.proto生成lua加载.pb二进制文件&#xff0c;并生成.pb列表文件&#xff0c;用于初始化加载 4.协议id生成cs&#xff0c;lua中枚举 区分cs&…

Splashtop正式入驻长三角(杭州)制造业数字化能力中心,赋能企业向数字化转型

2024年6月&#xff0c;Splashtop正式入驻长三角&#xff08;杭州&#xff09;制造业数字化能力中心。作为全球领先的远程桌面控制软件供应商&#xff0c;Splashtop致力于提供适用于远程办公、IT 和 MSP 远程支持等多场景的高性能远程桌面控制软件和解决方案&#xff0c;赋能企业…

Qt之QGraphicsView —— 笔记3:矩形图元连接(附完整源码)

效果 完整源码 注意:在ui文件中拖入一个QGraphicsView类窗口控件,然后用MyGraphicsView提升该类。 main.cpp #include "widget.h" #include <QApplication>int main(

SpringBoot+Vue学生宿舍管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 学生宿管员管理员 功能截图

基于非下采样小波包分析的滚动轴承故障诊断(MATLAB R2021B)

小波变换具有良好的时频局部化特性和多分辨率特性&#xff0c;可准确定位信号的突变点并可在不同尺度上描述信号的局部细节特征&#xff0c;被广泛应用于信号降噪。但标准正交小波变换不具有平移不变性&#xff0c;采用标准正交小波对信号消噪后&#xff0c;会在脉冲尖峰处产生…