当前位置: 首页 > article >正文

leetcode61:旋转链表

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

步骤 1:题目分析

  1. 输入条件

    • 一个单向链表的头节点 head 和一个整数 k
    • 链表的节点数目在 [0, 500] 的范围内。
    • 节点的值范围在 [-100, 100] 之间。
    • k 的范围可以大到 2 * 10^9,所以需要处理非常大的 k 值。
  2. 输出条件

    • 返回旋转后的链表的头节点,链表节点顺序需向右移动 k 个位置。
  3. 边界条件

    • 空链表或只有一个节点的链表不需要旋转。
    • k 值大于链表长度时,可以用 k % 链表长度 的结果来替代 k 进行旋转,减少计算量。

步骤 2:解决思路

  1. 确定链表的长度:首先遍历链表,计算链表长度 n
  2. 简化旋转步数
    • 如果 k 大于 n,只需旋转 k % n 次即可,因为每 n 次旋转会使链表回到原始位置。
  3. 将链表连接成环
    • 将链表的尾节点指向头节点,这样可以将旋转操作转化为在环上找到新的起始点。
  4. 找到新的头节点
    • 计算旋转后的新尾节点位置 n - k % n - 1
    • 将新尾节点的 next 设为 None,使链表断开,形成新的头尾链表。
  5. 时间复杂度:由于我们只需遍历链表两次,因此时间复杂度为 O(n)
  6. 空间复杂度:该方法不需要额外的空间,空间复杂度为 O(1)

C++ 实现代码

步骤 4:启发与优化

  • 时间复杂度优化:通过构建环来实现旋转,比逐一移动节点更高效。
  • 循环利用:利用 k % n 缩小旋转次数,避免多余的操作。
  • 空间优化:无需额外的数组存储链表节点,通过原地修改实现空间优化。

步骤 5:实际应用场景

这种旋转链表的方法在许多实际场景中都可以用到,比如在调度系统数据轮询中。例如,在任务调度中,经常需要实现循环调度,即将任务列表的顺序向右或向左移动,以均衡负载。通过这种方法可以有效地实现任务的优先级旋转资源的负载均衡,从而提升系统的稳定性和效率。


http://www.kler.cn/a/390846.html

相关文章:

  • 第74期 | GPTSecurity周报
  • 【mySql 语句使用】
  • 实现一个BLE HID鼠标
  • vue3 pdf base64转成文件流打开
  • 蓝凌OA-EKP hrStaffWebService 任意文件读取漏洞
  • 信捷 PLC C语言 POU 指示灯交替灭0.5秒亮0.5秒(保持型定时器)
  • DolphinDB 与南方科技大学联合授课啦!
  • LeetCode 457.环形数组是否存在循环
  • 学习python的第八天之数据类型——list列表
  • 《青牛科技GC6150:摇头机驱动芯片的卓越替代品,超越 TMI8150》
  • 设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例
  • ubuntu22.04 安装FFmpeg,并进行视频的转化格式和裁剪
  • 信创替代步入快车道|暴雨助力实现信创替代目标
  • ArkTS的进阶语法-1(泛型,工具类型,空安全)
  • 基于Cocos Creator开发的打砖块游戏
  • 基于STM32的智能家居安防系统设计
  • 【Transformer】模型输出模块处理
  • 快手,抖音IP属地怎么更改?快手抖音更改IP属地教程
  • 微服务链路追踪skywalking安装
  • 使用Matlab建立随机森林
  • 1.存储引擎:深入解析 MySQL 存储引擎与 InnoDB 文件结构
  • 【Django进阶】django-rest-framework中文文档——快速入门
  • Anaconda安装库
  • phpcms-tree(PHP无限级别分类)
  • Kafka-Eagle的配置——kafka可视化界面
  • redis十大数据类型