Leetcode-每日一题【61.旋转链表】

news2024/9/24 13:15:16

题目

给你一个链表的头节点 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.根据题目给出的示例,我们可以看出:将链表中每个节点向右移动K个位置,也就是将链表中倒数第K个节点作为头节点,其前面的所有节点放在原链表尾节点之后。

2.因此整体思路就是找到倒数第K个节点的前一个节点,然后让链表首尾相连,第K个节点作为链表旋转后的新的头节点,其前一个节点作为链表旋转后的尾节点。

3.但是由于k的值可能大于链表长度,因此我们需要先计算一下链表长度,用k对链表长度取余作为我们的新k,否则会空指针异常。

代码实现

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if(head == null){
            return head;
        }
       int len = calaulate(head);
       k = k % len;
       ListNode low = head;
       ListNode fast = head;
       for(int i = 1; i <= k; i++){
           fast = fast.next;
       }
       while(fast.next != null){
           low = low.next;
           fast = fast.next;
       }
       fast.next = head;
       head = low.next;
       low.next = null;
       return head;

    }
    private int calaulate(ListNode head){
        int length = 1;
        for(ListNode cur = head; cur.next != null; cur = cur.next){
            length++;
        }
        return length;
    }
}

测试结果 

 

 

 

 

 

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

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

相关文章

网页的动静分离设置

我们都知道nginx处理静态网页是强项,而tomcat处理动态网页是强项.我们可以发挥他们共同的优点.nginx处理静态页面而tomcat处理动态页面 进入nginx配置文件改 总结 1.改配置文件最好复制一份 2.做一步验证一步 才知道哪里出错了 3.出错了别着急先看页面在浏览器能不能打开 不…

Python 字节数组方式写入kafka(含报错return ‘<SimpleProducer batch=%s>‘ % self.async)

一、背景 项目开发了一个类似kafka tools查询工具的kafka 查询&#xff0c;现在需要测试一下如果通过字节数组的形式写入&#xff0c;看看查询有没有问题 二、kafka查询代码 Python代码示例&#xff1a; from kafka import KafkaProducer import json# 创建Kafka生产者 pro…

搭建高性能数据库集群之三:Keepalived实现MySQL集群高可用

搭建高可用集群&#xff0c;2台HAProxy 可实现Mycat多节点的集群高可用和负载均衡&#xff0c;而HAProxy 的高可用&#xff0c;由Keepalived来实现。Keepalived负责为该台服务器抢占vip(虚拟IP)&#xff0c;抢到后对该主机访问。 搭建高可用集群&#xff1a; 上图&#xff0…

开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道接口

开源全新H5充值系统源码&#xff0c;系统基于thinkphp框架开发&#xff0c;功能已全完善&#xff0c;可灵活对接其他上游渠道接口&#xff0c;默认对接了大猿人接口&#xff0c;另外可无限制自定义创建充值页面&#xff0c;首页支持后台自定义修改&#xff0c;支持三级分销&…

No1.精选前端面试题,享受每天的挑战和学习

文章目录 如何实现分页功能如何实现vue虚拟列表功能浏览器的渲染原理JS中Map、WeakMap和Object的区别 如何实现分页功能 要实现分页功能&#xff0c;主要涉及以下几个方面的步骤&#xff1a; 数据源&#xff1a;首先需要有一个数据源&#xff0c;可以是数据库、文件、API接口等…

Centos7修改root密码

1.首先启动系统&#xff0c;在这个开机界面按e&#xff0c;进入编辑模式 2.进入编辑界面&#xff0c;上下光标键移动&#xff0c;找到linux16这一行&#xff0c;在末尾追加内容init/bin/sh,然后按Ctrlx键进入单用户模式。 3.在单用户模式下输入mount -o remount, rw /,挂载…

二、QT工程中各个文件代表的含义

QT从入门到实战学习笔记 基本QT工程中各个文件知识1、main函数2、.pro工程文件3、QT5基本模块4、.h头文件 基本QT工程中各个文件知识 1、main函数 #include "mymainwindow.h" #include <QApplication> //包含一个应用程序类的头文件 //main程序入口 argc命…

SSM球场计费管理系统-计算机毕设 附源码77275

SSM球场计费管理系统 摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在球馆计费管理的要求下&#xff0c;开发一款整体…

听说最近ChatGPT很火?我来整个废话版ChatGPT!

文章目录 需求分析项目初始化读取语料库文件实现随机模块生成文章保存文章命令行配置参数命令行交互废话版ChatGPT网页版 废话版ChatGPT 的功能是能根据语料库的配置和用户输入的规则&#xff0c;随机生成一篇可长可短的文本&#xff0c;里面的内容语句通顺&#xff0c;但是废话…

系列三、RocketMQ安装

一、前置准备 安装JDK&#xff0c;要是没有安装&#xff0c;请参考如下文章进行安装 https://blog.csdn.net/HelloWorld20161112/article/details/129085841 二、安装 2.1、下载RocketMQ安装包 # 官网 https://rocketmq.apache.org/download# 我分享的 链接&#xff1a;htt…

借助navicat,把一个数据库里面的部分表数据,导入另一个数据库中

背景 准备 在navicat里面创建两个数据库&#xff0c;一个是n1,另一个是n2 n1:有数据&#xff0c;需要把n1里面的部分表数据导入到n2里面 n2:被导入的数据库 给n1录入数据 给n2导入部分数据 点击工具---》 点击数据传输 选择导入和导出的数据库 点击自定义&#xff0c;选择自己…

KMeans聚类算法实现

目录 1. K-Means的工作原理 2.Kmeans损失函数 3.Kmeans优缺点 4.编写KMeans算法实现类 5.KMeans算法测试 6.结果 Kmeans是一种无监督的基于距离的聚类算法&#xff0c;其变种还有Kmeans。其中&#xff0c;sklearn中KMeans的默认使用的即为KMeans。使用sklearn相关算法API…

【数据结构与算法】Huffman编码/译码(C/C++)

实践要求 1. 问题描述 利用哈夫曼编码进行信息通讯可以大大提高信道利用率&#xff0c;缩短信息传输时间&#xff0c;降低传输成本。但是&#xff0c;这要求在发送端通过一个编码系统对待传数据预先编码&#xff1b;在接收端将传来的数据进行译码(复原)。对于双工信道(即可以…

3D渲染的定义和应用领域

三维渲染&#xff08;3D rendering&#xff09;是一种将三维模型数据转化为二维图像的技术&#xff0c;通常利用计算机图形学的方法来实现。通过运用光线、材质、纹理、阴影等效果&#xff0c;将三维物体展现在二维屏幕上&#xff0c;以模拟真实世界中的三维景象。 一、三维渲…

el-table 默认勾选数据

目录 效果图 步骤&#xff1a; 1. 看elementui 官网上的案例&#xff0c;用到的方法是自带的 toggleRowSelection 2. 思路 原委 选中主表中的一条数据&#xff1b;判断与子表中的数据是否关联&#xff08;如果子表的关联ID主表的ID&#xff0c;则子表的这条数据显示被勾选&a…

CADD蛋白结构分析、虚拟筛选、分子对接(蛋白-蛋白、蛋白-

时间:第一天上午 课程名称:生物分子互作基础 课程内容:1.生物分子相互作用研究方法 1.1蛋白-小分子、蛋白-蛋白相互作用原理 1.2 分子对接研究生物分子相互作用 1.3 蛋白蛋白对接研究分子相互作用 课程名称:蛋白数据库 课程内容:1. PDB 数据库介绍 1.1 PDB蛋白数据库功能 1.2 …

Springboot整合jdbc_template

1.构建Springboot项目 利用springboot整合jdbctemplate,并不需要导入其他的依赖&#xff0c;具体的项目结构图如图 2.写domain层 数据库映射的实体类 package com.jkk.springboot_jdbc_template.domain;/*** author jkk*/import lombok.AllArgsConstructor; import lombok…

04 - C++学习笔记: 循环语句和跳转语句

在C编程中&#xff0c;循环语句和跳转语句是非常重要的控制结构。循环语句允许重复执行一段代码&#xff0c;而跳转语句允许在程序执行过程中改变执行的流程。本篇笔记将介绍C中常用的循环语句和跳转语句&#xff0c;并通过例子进行说明。 &#x1f501;循环类型 C 编程语言提…

查询子节点 postgresql

数据库为postgresql WITH RECURSIVE cte AS (SELECTn. ID,n. com_name,n."parentId" AS pidFROMcompany AS nWHEREn. ID = 2UNION ALLSELECTr. ID,r. com_name,cte. ID AS pidFROMcteJOIN company AS r ON r.

轻松实现邮箱验证码功能!快来体验Spring Boot的神奇力量!

邮件验证是现代互联网服务中常用的安全功能&#xff0c;本文介绍如何利用Spring Boot框架快速搭建一个高效易用的邮箱验证码功能。从配置邮箱>发送服务&#xff0c;到编写验证逻辑&#xff0c;无痛实现邮箱验证码功能轻而易举。快来掌握这个技能&#xff0c;加强您的应用安全…