61.旋转链表 python

旋转链表

  • 题目
    • 题目描述
    • 示例 1:
    • 示例 2:
    • 提示:
  • 题解
    • 思路分析
    • Python 实现代码
    • 代码解释
    • 提交结果

题目

题目描述

给你一个链表的头节点 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 * 1 0 9 10^9 109

题解

思路分析

为了实现链表的旋转,可以采取以下步骤:

  1. 计算链表长度:首先遍历链表以获取其长度,并找到链表的尾节点。
  2. 处理 k 值:如果 k 大于链表的长度,则实际需要旋转的位置为 k % 链表长度,因为旋转链表的周期性特性。
  3. 形成环形链表:将尾节点指向头节点,形成一个环形链表。
  4. 找到新的头节点和尾节点:根据实际需要旋转的位置,确定新的头节点和尾节点。
  5. 断开环:将新的尾节点的 next 设置为 null,恢复链表结构。

Python 实现代码


def rotateRight(head: ListNode, k: int) -> ListNode:
    if not head or not head.next or k == 0:
        return head
    
    # 计算链表长度并找到尾节点
    length = 1
    tail = head
    while tail.next:
        tail = tail.next
        length += 1
    
    # 计算实际需要旋转的位置
    k %= length
    if k == 0:
        return head
    
    # 形成环形链表
    tail.next = head
    
    # 找到新的尾节点位置
    new_tail = head
    for _ in range(length - k - 1):
        new_tail = new_tail.next
    
    # 新的头节点
    new_head = new_tail.next
    
    # 断开环
    new_tail.next = None
    
    return new_head

代码解释

  1. 计算链表长度:通过遍历链表来计算其长度,并找到尾节点。
  2. 处理 k 值:使用 k % length 来确定实际需要旋转的位置,避免不必要的多次旋转。
  3. 形成环形链表:将尾节点的 next 指向头节点,形成环形链表。
  4. 找到新的头节点和尾节点:从头节点开始,向前移动 length - k - 1 步找到新的尾节点,其 next 即为新的头节点。
  5. 断开环:将新的尾节点的 next 设置为 None,恢复链表结构。

这种方法的时间复杂度为 O(n),其中 n 是链表的长度,因为我们只需要遍历链表几次。空间复杂度为 O(1),因为我们只使用了常数级别的额外空间。

提交结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么时候出现对象?芊芊测字,ai测字

芊芊测字地址&#xff1a;芊芊测字-ai免费测字

SpringMVC(1)——SpringMVC配置和基本原理

目录 ​编辑 第一章&#xff1a;Java web的发展历史 一.Model I和Model II 1.Model I开发模式&#xff08;已经淘汰&#xff09; 2.Model II开发模式 二. MVC模式 第二章&#xff1a;SpringMVC的入门案例 搭建SpringMVC的入门程序 ①&#xff1a;创建WEB工程&#xff…

Switch组件的用法

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了PageView这个Widget,本章回中将介绍Switch Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的Switch是指左右滑动的开关,常用来表示某项设置是打开还是关闭。Flutter中使用Switch类表…

电脑中缺失的nvrtc64_90.dll文件如何修复?

一、文件丢失问题 案例&#xff1a;nvrtc64_90.dll文件缺失 问题分析&#xff1a; nvrtc64_90.dll是NVIDIA CUDA Runtime Compilation库的一部分&#xff0c;通常与NVIDIA的CUDA Toolkit或相关驱动程序一起安装。如果该文件丢失&#xff0c;可能会导致基于CUDA的应用程序&…

Springboot使用RabbitMQ实现关闭超时订单的一个简单示例

1.maven中引入rabbitmq的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 2.application.yml中进行rabbitmq相关配置&#xff1a; # rabbit…

简易CPU设计入门:内存读写(二)

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 CSDN文章&#xff1a;下载本项目代码 上述链接为本项目…

CSS 学习之 padding 与图形绘制

padding 属性和 background-clip 属性配合&#xff0c;可以在有限的标签下实现一些 CSS 图形绘制效果&#xff0c;我这里举两个小例子&#xff0c;重在展示可行性。 例 1:不使用伪元素&#xff0c;仅一层标签实现大队长的“三道杠”分类图标效果。此效果在移动端比较常见&…

Qt实现使用TCP与RS485串口设备通信————附带详细实践方法

文章目录 0 背景1 协议介绍1.1 modbusRTU协议1.1.1 简介1.1.2 RS485和modbusRTU的关系1.1.3 modbusRTU 协议格式1.1.3.1 0x10写多个保持寄存器1.1.3.2 0x02读多个离散输入寄存器1.1.3.3 0x03读多个保持寄存器1.1.3.4 0x04读多个输入寄存器 1.2 ModbusTCP协议1.2.1 ModbusTCP协议…

Mono里运行C#脚本21—mono_image_init_name_cache

前面分析了怎么样加载mscorlib.dll文件,然后把文件数据读取到内存。 接着下来,就会遇到加载整个C#的类型系统,比如System. Object,大体类型如下图所示: 在对CIL编译之前,需要把这些类型全部加载到内存里,以便快捷地访问它们。 mono_image_init_name_cache函数就是完成…

Linux(14)——网络管理

目录 一、检测网络配置&#xff1a; 1、查看网络接口&#xff08;ip&#xff09;&#xff1a; 2、查看性能&#xff08;ip&#xff09;&#xff1a; 3、查看 IP 地址&#xff08;ip&#xff09;&#xff1a; 4、查看路由表&#xff08;ip&#xff09;&#xff1a; 5、追踪…

深度学习笔记(12)——深度学习概论

深度学习概论 深度学习关系&#xff1a; 为什么机器人有一部分不在人工智能里面&#xff1a;机器人技术是一个跨学科的领域&#xff0c;它结合了机械工程、电子工程、计算机科学以及人工智能&#xff08;AI&#xff09;等多个领域的知识。 并不是所有的机器人都依赖于人工智能…

基于Springboot + vue实现的高校办公室行政事务管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

欧科云链研究院:ChatGPT 眼中的 Web3

编辑&#xff5c;OKG Research 转眼间&#xff0c;2024年已经进入尾声&#xff0c;Web3 行业经历了热闹非凡的一年。今年注定也是属于AI的重要一年&#xff0c;OKG Research 决定拉上 ChatGPT 这位“最懂归纳的AI拍档”&#xff0c;尝试把一整年的研究内容浓缩成精华。我们一共…

急需升级,D-Link 路由器漏洞被僵尸网络广泛用于 DDoS 攻击

僵尸网络活动增加 &#xff1a;新的“FICORA”和“CAPSAICIN”僵尸网络&#xff08;Mirai 和 Kaiten 的变体&#xff09;的活动激增。 被利用的漏洞 &#xff1a;攻击者利用已知的 D-Link 路由器漏洞&#xff08;例如 CVE-2015-2051、CVE-2024-33112&#xff09;来执行恶意命…

df.replace({‘b‘: r‘\s*(\.)\s*‘}, {‘b‘: r‘\1ty‘}, regex=True)

这段代码 df.replace({b: r\s*(\.)\s*}, {b: r\1ty}, regexTrue) 用于在 DataFrame 中进行替换操作&#xff0c;具体来说是针对 b 列&#xff0c;匹配并替换符合正则表达式的值。 详细解析&#xff1a; df.replace()&#xff1a;这是 Pandas 中的 replace() 方法&#xff0c;用…

springboot原生socket通讯教程

需求背景 最近需要对接一些硬件设备,他们选择了socket通讯,并且使用的是私有化协议加密通讯。这种情况下适合原生的socket加解密解析,不适合NettySocket,这在开发中增加了难度。所有的代码都要手动去敲。如果你的只想通过socket传输一些数据,而且都是json的数据,例如聊天…

redis的学习(一)

1.环境搭建 1.1 在ubuntu上安装redis 1.2 reids客户端介绍 redis也是一个客户端-服务器结构的程序。redis客户端和服务器可以在同一份主机上&#xff0c;也可以在不同的主机上&#xff0c;因为二者是通过网络进行发送和接收请求的。 redis服务器是负责存储和管理数据的。 red…

UCAS 24秋网络认证技术 CH16 OAuth OIDC复习

单点登录、OAuth、OIDC原理过程区别 文章目录 单点登录、OAuth、OIDC原理过程区别单点登录概念优点 什么是 OAuth&#xff1f;概述OAuth 2.0 中的角色客户端类型客户端注册抽象协议流程协议流程图 Authorization Grant (授权许可)Access Token (访问令牌)Refresh Token (刷新令…

PDF预览插件

PDF预览插件 可用于当前页面弹窗形式查看,可增加一些自定义功能 pdf预览插件 代码块: pdfobject.js <div class="pdfwrap"><div class="item"><h3>笑场</h3><div class="tags"><p>李诞</p><i&…

Echarts+vue电商平台数据可视化——webSocket改造项目

websocket的基本使用&#xff0c;用于测试前端能否正常获取到后台数据 后台代码编写&#xff1a; const path require("path"); const fileUtils require("../utils/file_utils"); const WebSocket require("ws"); // 创建WebSocket服务端的…