[leetcode] 61. 旋转链表

文章目录

  • 题目描述
  • 解题方法
    • 遍历
      • java代码
      • 复杂度分析
  • 相似题目

题目描述

给你一个链表的头节点 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]

提示:

  • 链表中节点的数目在范围 [0, 500] 内
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 109

解题方法

遍历

链表向右移动k个位置,实际上就是将新链表以倒数第k个节点为新的头结点,若倒数第k+1个节点存在,则以倒数第k+1个节点为新链表的尾节点。
这样思路一下就开阔了,我们只需要通过遍历找到倒数第k个节点、倒数第k+1个节点和旧链表的尾节点,然后将新链表的指针重新指向新的节点。

java代码

ListNode结构

public class ListNode {public int val;public ListNode next;public ListNode() {}public ListNode(int val) {this.val = val;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}

旋转链表方法

public ListNode rotateRight(ListNode head, int k) {if (head == null || k == 0) {return head;}ListNode node = head;// 记录尾节点ListNode tail = null;// 记录链表长度int length = 0;while(node != null) {length++;tail = node;node = node.next;}// 当k > length时,对k取余k = k % length;if (k == 0) {return head;}ListNode dummyNode = new ListNode(0);dummyNode.next = head;// 快指针ListNode fast = dummyNode;for(int i = 0; i < k; i++) {fast = fast.next;}// 利用快慢指针将node指针指向倒数第k个节点node = dummyNode;// pre指针指向node的前一个节点ListNode pre = null;while(fast != null) {fast = fast.next;pre = node;node = node.next;}// 旧链表的尾节点的next指针指向headtail.next = head;// pre变为了新链表的尾节点,pre节点的next指针指向nullpre.next = null;return node;
}

复杂度分析

时间复杂度: O ( N ) O(N) O(N),需要遍历两次链表。
空间复杂度: O ( 1 ) O(1) O(1),只有常数级别的变量存储。

相似题目

[leetcode] 19. 删除链表的倒数第 N 个结点
[leetcode] 25. K 个一组翻转链表


  • 个人公众号
    个人公众号
  • 个人小游戏
    个人小游戏

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

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

相关文章

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习 1、 for i in range(3):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()3、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()4、 for…

Python中覆盖类属性最好的方法

Python中有一个很独特的功能,类属性可为实例属性提供默认值。下面Person类中有一个名为current_year的类属性。compute_age方法中用到了这个属性,而且都故意使用self.current_year读取它的值。因为Person本身没有current_year这个实例属性,所以self.current_year默认获取的是…

算法人生(13):从“Scrum”看“PDCA时间管理法”

很多人会好奇为什么“读了很多书&#xff0c;却依然不知道怎么过好这一生”&#xff1f;大家可能都有各自的理解&#xff0c;但正如王阳明先生的“知行合一”所说&#xff0c;“知”要能“行”出来才算“真知”&#xff0c;生活中很多时候知并不一定能行&#xff0c;所以知与行…

python - mac安装mysqlclient

参考 https://github.com/PyMySQL/mysqlclient 安装 xcode xcode-select --install安装mysql brew uninstall mysql brew install mysql8.0启动 mysql-server 命令如下 brew services start mysql8.0安装 mysql-client brew uninstall mysql-client wget https://raw.git…

Deep learning Part Five RNN--24.4.29

接着上期&#xff0c;CBOW模型无法解决文章内容过长的单词预测的&#xff0c;那该如何解决呢&#xff1f; 除此之外&#xff0c;根据图中5-5的左图所示&#xff0c;在CBOW模型的中间层求单词向量的和&#xff0c;这时就会出现另一个问题的&#xff0c;那就是上下文的单词的顺序…

PC通过串口发送指令控制LED+串口中断

如何让单片机接收数据&#xff1f; 首先要打开SCON中的串行接收控制位REN。当REN1时为允许接收状态&#xff0c;可以接收信息。 因此令SCON 0x50&#xff1b; 怎么知道收到数据&#xff1f; 利用RI接收中断请求标志位。当串行接收到第8位结束时由内部硬件自动置为RI1&#…

机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

【抽代复习笔记】17-群(十一):置换的练习题(1)

练习1&#xff1a;计算&#xff1a; 解&#xff1a; 解析&#xff1a;①左边的置换是1保持不变&#xff0c;2变成3&#xff0c;3变成4&#xff0c;4变成5&#xff0c;5变成2&#xff0c;因此可以简写为(2345)&#xff1b;右边的置换是2和5保持不变&#xff0c;1变成3&#xff…

NPDP产品经理认证报考条件及流程

你是否经常感到无法准确了解用户需求&#xff0c;市场细分让你困扰不已&#xff1f;你是否经常觉得自己创意匮乏&#xff0c;无法持续进行创新&#xff1f;你是否时常发现沟通效率低下&#xff0c;团队协作总是充满摩擦&#xff1f;你是否因为提出的方案被否决而感到失望和挫折…

Git从旧的仓库迁移到新的仓库后clone lfs的文件出现错误

一、问题描述 利用git转移仓库从gitee的testA.git仓库到coding的testB.git利用命令 git clone --mirror gitgitee.com:dev/testA.git cd testA.git git push --mirror gitgit.e.coding.test.clund:dev/testB.git 可以迁移成功&#xff0c;但是在clone新的仓库时候会发现存在l…

购物网站-批发

https://p4psearch.1688.com/hamlet.html 1688&#xff0c;批发采购为主&#xff0c;货物全 https://www.wsy.com/ 网商园&#xff1a;鞋包衣服&#xff0c;进价略低 https://www.yiwugo.com/ 义乌购&#xff1a;义乌小商品城线上平台 http://www.k3.cn/ 开山网&#xff1a;专门…

k8s环境部署gpu以及CUDA兼容性分析

本文记录和学习在实用gpu搭建k8s支持上层应用时的功能实践和遇到的问题。 1. 基础概念 CUDA本质上就是NVIDIA专为通用高性能并行计算设计的一套计算平台和编程模型&#xff0c;换句话使用GPU并行编程的规范方法&#xff0c;所以CUDA在软件层面包含了众多库&#xff0c; 那这里…

万兴PDF专家 PDFelement Pro v10.3.8 破姐版!

&#x1f9d1;‍&#x1f4bb;万兴PDF专家 PDFelement Pro v10.3.8 破姐版 (https://docs.qq.com/sheet/DRVVxTHJ3RXJFVHVr)

docker mysql更新升级版本

一、环境说明 操作系统&#xff1a;Centos7 数据库版本&#xff1a;MySql 8.0.22 数据库中数据量不大&#xff0c;处于开发/测试环境&#xff0c;风险较低 二、升级原因 升级是因为测评漏洞&#xff0c;在进行国家三级等级保护测评过程中&#xff0c;漏扫发现多个MySql漏洞…

Linux学习之IP协议

前言&#xff1a; 在学习IP协议i前&#xff0c;我们其实知道网络协议栈是一层层的&#xff0c;上层封装好之后就传给下层&#xff0c;对于我们治安学习到的TCP协议&#xff0c;在对数据进行封装之后&#xff0c;并不是直接就将数据进行传输&#xff0c;而是交给下一层网络层进…

C++顺序容器3——容器适配器

容器适配器 除了顺序容器外&#xff0c;标准库还定义了三个顺序容器适配器&#xff1a;stack、queue和priority_queue。 适配器&#xff08;adaptor&#xff09;是标准库中的一个通用概念。容器、迭代器和函数都有适配器。 本质上&#xff0c;一个适配器是一种机制&#xff…

C++11 右值与移动语义

前言&#xff1a; 我们首先汇总一下在C11中新的变化&#xff1a; 1、新容器 —— unodered_xxx 2、新接口 cbegin等&#xff0c;无关痛痒initializer_list系列的构造push_xxx / insert / emplace 等增加右值引用插入版本&#xff0c;意义重大&#xff0c;提高效率容器新增移…

领域驱动设计(DDD)笔记(一)基本概念

文章链接 领域驱动设计&#xff08;DDD&#xff09;笔记&#xff08;一&#xff09;基本概念-CSDN博客领域驱动设计&#xff08;DDD&#xff09;笔记&#xff08;二&#xff09;代码组织原则-CSDN博客 DDD基本概念 DDD 是一种面向复杂需求的软件设计方法&#xff0c;将软件开…

【Vue3】openlayers加载瓦片地图并手动标记坐标点

目录 一、创建Vue3项目 二、openlayers加载瓦片地图&#xff08;引js文件版&#xff09; 2.1 将以下的文件复制到public下 2.2 index.html引入ol脚本 2.3 删除项目自带的HelloWorld.vue&#xff0c;创建Map.vue 2.4 编码Map.vue 2.5 修改App.vue 2.6 启动项目测试 三、…

通信光缆主要敷设方式有哪些(续)

在《通信光缆主要敷设方式有哪些》一文中&#xff0c;介绍了光缆的直埋、架空和管道敷设方式。此外&#xff0c;根据敷设场景的不同&#xff0c;光缆的常见敷设方式还包括&#xff1a;高铁槽道内敷设、水底敷设、墙壁敷设、引上、室内敷设等。 1 高铁槽道内光缆敷设 光缆顺沿高…