【leetcode】61. 旋转链表 (python)

news2024/10/6 2:28:16

题目链接:61.旋转链表

在这里插入图片描述
在这里插入图片描述

写法一:暴力

class Solution(object):
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        # 暴力:每次移动一个,时间复杂度 O(N^2),空间复杂度O(1)
        if not head or not head.next:
            return head
        p, cnt = head, 0
        while p:
            p = p.next
            cnt += 1  # cnt: 链表长度
        if k > cnt:
            k = k % cnt
        h, p = head, head
        while k:
            while p.next:
                pre = p
                p = p.next
            pre.next = None
            p.next = h
            h = p
            k -= 1
        return h

写法二

# 循环右移, 时间复杂度O(n), 空间复杂度O(1)
#  思路:指针遍历到倒数第k个元素,将其后所有元素插入到链表头部。
    # 如何确定倒数第k个位置的元素?
    #    -->遍历两遍链表,第一遍遍历确定链表元素总个数cnt。第二遍遍历到第cnt-k个位置就是倒数第k个元素。
    # 注意:如果 k > len(head): 取余数,相当于移动余数个元素
class Solution(object):
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        if not head or not head.next: # 0或者1个元素,移动多少个位置都还是原样
            return head
        p, cnt = head, 0
        while p:  # 确定链表元素总个数
            p = p.next
            cnt += 1
        k = k % cnt # 取余数,循环右移余数个位置
        if k == 0:  
            return head
        p1 = head
        for i in range(cnt - k): # 寻找倒数第k个位置
            pre1 = p1
            p1 = p1.next
        pre1.next = None # 在倒数第k个位置,断开链表
        hh = p1  # hh 为新链表的头指针
        while p1.next: # 寻找到最后一个元素
            p1 = p1.next
        p1.next = head # 让最后一个元素的指针指向head
        return hh

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

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

相关文章

详解汽车电磁悬架(上)

摘要: 从汽车发明之日起,人们对于汽车平稳行驶的追求步伐就不曾停止过。充气轮胎的发明让车辆能够更加平稳舒适的行驶,承载式车身以及加厚的底盘则进一步提高了汽车的舒适性。随着科技的发展与生活水平的提高,人们对汽车的舒适性…

【C】字符串函数和内存函数的介绍

库函数(这些函数都在头文件string.h中) 字符串函数求字符串长度strlen 长度不受限的字符串函数strcpystrcmpstrcat 长度受限的字符串函数strncpystrncmpstrncat 字符串查找strstrstrtok 错误信息报告strerror 字符操作字符分类函数字符转换函数 内存函数…

测试必备的15个docker命令,你都掌握了吗

1、Docker容器信息 ##查看docker容器版本docker version##查看docker容器信息docker info##查看docker容器帮助docker --help 2、镜像操作 提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。 2.1、镜像查看 ##列出本地imagesdocker images##含中间映像层docke…

iview-admin使用小结

首先在使用一个框架之前一定要完整的看一下相关文档,因为框架中会封装常用的功能,也会更加符合大众要求。在ui设计图上,可能实现某个功能设计图中给出的交互并不是很好,而在框架中有更好的组件可以实现,但因为没有看文…

物联网技术、测试要点和测试标准

目录 物联网定义 物联网中最常用的技术 物联网测试概述 测试人员在物联网中面临的挑战 测试物联网系统时使用了各种工具 🎁更多干货 完整版文档下载方式: 物联网定义 物联网:利用嵌入式电子设备、微芯片等连接车辆、家电、医疗设备&am…

广州华锐互动 | 鸡养殖VR教育实训系统

鸡养殖VR教育实训系统由广州华锐互动开发,是一种基于虚拟现实技术的培训工具,旨在为鸡养殖行业的从业人员提供更加直观、生动的学习体验。该系统通过虚拟现实技术,将鸡养殖过程中的各种场景、操作和技能呈现在学员面前,让学员可以…

关于 Linux 的常用命令

目录 前言什么是 Linux获得 Linux 环境为什么使用命令控制关于 XShell 下的复制粘贴 Linux 常用命令ls (罗列文件)cd (切换目录)pwd (显示当前路径)touch (创建一个空文件)cat (读取文件内容)man (查看用户手册)echo (回显)vim (文件编辑器)mkdir (创建目录)rm (删除目录/文件)…

数仓常见问题以及解决方案yyds

文章目录 01 数据仓库现状业务系统侧【上游】数仓内部数据应用测【下游】 02 如何解决问题业务系统侧【上游】数仓内部 03 体系化架构设计一致性维度一致性事实数据应用侧【下游】 建设可视化的取数平台 大家好,我是脚丫先生 (o^^o) 看到几篇不错的文章&#xff0c…

App Inventor 2 从.aia项目文件中提取.aix拓展包

从.aia项目文件中提取.aix拓展包的步骤 如果看到一个项目中,用到了拓展,但拓展的帮助中没有原链接,这时就可以考虑从项目文件中进行提取: 导出项目.aia文件: 在电脑的“下载”目录查看.aia项目文件: 将.a…

写在2023年年中

写在2023年年中 收拾旧山河再出发 很久没有写规划了,博客也很少写,着实是太懒了。想想自己年纪也不小了,加上程序员的环境越来越不好,总得想想自己的出路不是。 目标 提升系统设计能力保持算法刷题能力(一般面试需要)知识输出能…

RabbitMQ工作模式代码示例及用SpringBoot整合RabbitMQ

一,RabbitMQ的工作模式 RabbitMQ 的工作模式是指 RabbitMQ 中不同的消息传递方式,包括简单模式、工作队列模式、发布订阅模式、路由模式和主题模式 。这些工作模式适用于不同的应用场景。详细的文档可参照RabbitMQ的官网:RabbitMQ: easy to u…

基于JavaSwing+MySQL的员工工资管理系统

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/88042468?spm1001.2014.3001.5503 JDK1.8 MySQL5.7

虚拟与现实的交融:VR与数字孪生的融合之道

VR即虚拟现实(Virtual Reality)和数字孪生(Digital Twin)是当今科技领域的两大热门概念,VR以其沉浸式的体验和逼真的虚拟环境,让用户身临其境,开启了全新的交互方式和感官体验;而数字…

副业做什么比较靠谱,不想只靠一个收入

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 如今做一些副业能不能有一点安全感,分享一些可靠的副业,坚持下去&…

Abandoning the Bayer-Filter to See in the Dark 论文阅读笔记

这是CVPR2022的一篇暗图增强的文章,TCL AI Lab与福州大学,韩国延世大学,安徽大学的合作论文网络以黑暗环境下拍摄的color raw为输入,用一个de-bayer-filter module恢复无拜尔滤波器的raw data(文章认为拜尔滤波器使得光…

leetcode 987. 二叉树的垂序遍历(java)

二叉树的垂序遍历 leetcode 987. 二叉树的垂序遍历题目描述DFS 优先队列(堆)代码演示 二叉树专题 leetcode 987. 二叉树的垂序遍历 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/vertical-orde…

AI文本标注的概念,类型和方法

我们每天都在与不同的媒介(例如文本、音频、图像和视频)交互,我们的大脑对收集到的信息进行处理和加工,从而指导我们的行为。在我们日常接触到的信息中,文本是最常见的媒体类型之一,由我们交流使用的语言构…

优化SQL查询实现高效数据检索(一)

大家好,SQL(结构化查询语言)可以帮助大家从数据库中收集数据,它是专为此而设计的,换句话说,它使用行和列来处理数据,让使用者能够使用SQL查询来操作数据库中的数据。 SQL查询 SQL查询是一系列…

11-2.箭头函数与函数的this问题

目录 1 箭头函数 1.1 基本使用 1.2 在只有一个参数的时候,小括号可以省略 1.3 只有一行时,可以省略大括号 1.4 只有一行时的return问题 1.5 直接返回一个对象 1.6 箭头函数使用剩余参数 2 this问题 2.1 直接打印this 2.2 fucntion定…

接口工具Postman知多少

目录 前言: Postman简介 如何使用Postman 1)主界面 2)测试用例的创建 3)请求结果 4)测试集的创建 使用方法: 前言: Postman是一个流行的API开发和测试工具,它提供了丰富的功…