力扣经典面试题-旋转链表(Java)

news2024/11/24 22:44:49

 1.题目描述:给你一个链表的头节点 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]

解题思路

具体来说,我把这道题拆解成了四个关键的步骤。这道题我的大致的理解就是把需要旋转的节点通过头插法放到链表头。

1.获取链表的长度

第一个步骤就是测量链表的长度,举个很简单的例子。比如说我们的链表是[0,1,2],而k =1那么就是把2这个链表元素旋转到表头那里。那么肯定是要得到链表的长度然后才能找到最后一个元素。然后我们把最后一个元素头插到链表头那里去。于是我们的链表就变成[2,0,1]了。这是其中的一个步骤,整体上也要使用这个思路来解题。

2.计算需要旋转的次数

上面只是说了一个小步骤,但是其实我们这个题需要当成整体来解。什么意思呢,就像第一个例子那样输入:head = [1,2,3,4,5], k = 2那就是旋转两次,那么就是先把5旋转到链表头那里,然后再把4旋转到链表头那里,所以是旋转两次。而且k有可能大于链表的长度,因此有可能需要取模操作。

3.找到需要分割的位置

循环遍历到需要分割的位置,在这里把链表一刀两断,然后重新拼接到链表头。

4.分割链表之后重新连接

这个其实就是我说的头插法,把旋转的链表放到链表头那里。

5.算法的实现(Java)

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (head == null || head.next == null)
            return head;
        ListNode cur = head;
        // 1. 先找到链表的长度
        int length = 0;
        while (cur != null) {
            length++;
            cur = cur.next;
        }
        // 2. 计算需要旋转的次数
        k = k % length;
        if (k == 0) {
            return head;
        }

        // 3. 找到需要分割的位置
        cur = head;
        for (int i = 0; i < length - k - 1; i++) {
            cur = cur.next;
        }//找到旋转位置的前一个位置
        // 4. 分割链表并重新连接
        //新的头节点在cur的下一个位置,就是cur之后的节点都要头插法头插到头节点那里去。
        ListNode newHead = cur.next;
        //既然要使用头插法,我们平时一个节点的话很好说,直接尾插就行,但是这是一堆节点,所以就得找到最后一个节点
        //找到最后一个节点然后才能头插

        ListNode tail = newHead;
        
        cur.next = null;
        while (tail.next != null) {
            tail = tail.next;//尾节点遍历到newHead的最后一个节点
        }
        tail.next = head;//头插法
        return newHead;

    }
}

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

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

相关文章

stanfordcorenlp+python做中文nlp任务,得到的结果中全是空字符串,而不是中文字符串

问题描述 代码&#xff1a; from stanfordcorenlp import StanfordCoreNLP import logging#中文中的应用&#xff0c;一定记得下载中文jar包&#xff0c;并标志lang‘zh’ nlp_zh StanfordCoreNLP(rD:\stanford-corenlp-full-2016-10-31, port8094, langzh,quietFalse,logg…

基于YOLOv8的海面石油泄露检测实例分割完整含数据集

需要收集包含海面石油泄漏的图像数据集&#xff0c;并进行标注以指示泄漏区域。接下来&#xff0c;可以使用深度学习框架如PyTorch或TensorFlow&#xff0c;基于YOLO&#xff08;You Only Look Once&#xff09;系列的目标检测模型结构&#xff0c;进行训练。YOLO系列的模型具有…

电压模式 R-2R DAC 的工作原理和特性

在本文中&#xff0c;我们将探索什么是 R-2R DAC 以及如何实现它们。 首先&#xff0c;我们将简要回顾一下开尔文分频器 DAC。这种结构很简单&#xff0c;但需要大量电阻和开关来实现高分辨率 DAC。此问题的一种解决方案是称为 R-2R DAC 的 DAC 结构。这些结构巧妙地利用梯形网…

Elasticsearch 认证模拟题 - 14

一、题目 在集群中输入以下指令&#xff1a; PUT phones/_doc/1 {"brand":"Samsumg","model":"Galaxy S9","features":[{"type":"os", "value":"Android"},{"type":&q…

李飞飞解读创业方向:「空间智能」

在AI领域&#xff0c;李飞飞教授一直是一个举足轻重的存在。她的研究和见解不仅推动了计算机视觉的发展&#xff0c;更对人工智能的未来方向产生了深远的影响。在最近的一次演讲中&#xff0c;李飞飞详细解读了她对于「空间智能」的见解。本文将对她的演讲内容进行详细解读&…

如何使用GPT-4o函数调用构建一个实时应用程序?

本教程介绍了如何使用OpenAI最新的LLM GPT-4o通过函数调用将实时数据引入LLM。 我们在LLM函数调用指南(详见https://thenewstack.io/a-comprehensive-guide-to-function-calling-in-llms/)中讨论了如何将实时数据引入聊天机器人和代理。现在&#xff0c;我们将通过将来自Fligh…

持续警惕火灾风险:学校可燃气体报警器的定期校准检验

可燃气体报警器在学校中的安装、检验和校准对于保护师生生命安全至关重要。 接下来&#xff0c;佰德将探讨可燃气体报警器在学校中的必要性&#xff0c;以及相关实际案例和数据&#xff0c;为您呈现一个安全的学习环境。 一、学校安全不能掉以轻心 学校是培养未来的摇篮&…

Android限制参数传递之StringDef注解的使用

文章目录 1. 引言2. 注解 StringDef2.1 举例2.2 StringDef源码解释 3. 其他类似注解 IntDef、LongDef4. 总结 1. 引言 在参数传递时&#xff0c;如果你想限制传入的参数只能是特定的几个值&#xff0c;该怎么做呢&#xff1f; 除了把参数类型定义为枚举值&#xff0c;还可以使…

Boom 3D软件最新版下载及详细安装教程

值得肯定的是Boom 3D最新版新增的Boom音量控制器和Controlled Boost功能为使用者提供了一个完美的控制&#xff0c;通过一个整齐的设计切换栏的系统音频输出&#xff0c;帮助他们轻松调整音量&#xff0c;从而让他们实现理想的音频输出&#xff0c;有需要的欢迎来开心电玩下载使…

C++笔记之一个函数多个返回值的方法、std::pair、std::tuple、std::tie的用法

C++笔记之一个函数多个返回值的方法、std::pair、std::tuple、std::tie的用法 —— 2024-06-08 杭州 code review! 文章目录 C++笔记之一个函数多个返回值的方法、std::pair、std::tuple、std::tie的用法一.从一个函数中获取多个返回值的方法1. 使用结构体或类2. 使用`std::t…

Polar Web【中等】你知道sys还能这样玩吗

Polar Web【中等】你知道sys还能这样玩吗 Contents Polar Web【中等】你知道sys还能这样玩吗思路&探索源码 EXPPHP测试生成十六进制化的命令上传测试 Python 脚本 运行&总结 思路&探索 本题属实是有些…即使提示了sys也难以迅速想到 /sys.php 这个路径&#xff0c;…

IP纯净度是什么,对用户有多么重要?

在网络应用和数据采集等领域&#xff0c;代理IP被广泛使用&#xff0c;而代理IP的纯净度则直接影响其性能和可用性。代理IP的纯净度主要涉及到代理IP在网络传输过程中的稳定性、匿名性和安全性。今天就带大家一起了解代理IP纯净度对用户的重要性。 第一&#xff0c;保护用户的隐…

密文域可逆信息隐藏安全性研究-从图像到视频

前言 随着云存储、云计算等新兴技术的兴起&#xff0c;海量的隐私信息被广泛地上传、存储到服务器上。为保证用户的隐私性&#xff0c;必须对用户的数据进行加密&#xff0c;然后再将其上传到服务器上。因此&#xff0c;密文域的可逆信息隐藏(reversible data hiding in encry…

RPM包方式离线部署gitlab

下载安装包 要求&#xff1a;可以联网&#xff0c;系统及版本与目标服务器一致。配置gitlab yum仓库 curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash 新建包存放目录 mkdir /root/gitlab 下载gitlab及相关安装包 …

RPA影刀 | 变量的使用

1.什么是变量 2.变量的作用 作用1&#xff1a;方便后续流程调用 这里在后续流程“点击元素”中&#xff0c;就可以选中这个变量 作用2&#xff1a;区分相同属性的变量 如果要打开两个网页&#xff0c;总不能都叫web_page吧。 所以这里一个叫百度web_page&#xff0c;一个叫…

【论文阅读】Point2RBox (CVPR’2024)

paper:https://arxiv.org/abs/2311.14758 code:https://github.com/yuyi1005/point2rbox-mmrotate

2024版本---LabVIEW 软件安装及使用教程

目录 第1章 LabVIEW 软件安装及使用教程 1. 简介 2. 安装教程 2.1 下载 LabVIEW 2024 版本 2.2 安装 LabVIEW 3. 激活 LabVIEW 4. LabVIEW 基本使用教程 4.1 用户界面介绍 4.2 创建一个简单的 VI&#xff08;虚拟仪器&#xff09; 4.3 数据采集示例 5. 进阶功能介绍…

关于软件调用独显配置指引【笔记】

关于笔记本电脑不支持独显直连的&#xff0c;bios下也是没有切换独显直连的选项的&#xff0c;处理方法 简单的来说按照图片指引可配置让软件调用独显&#xff1a; 1、进入系统→屏幕→显示卡界面&#xff1b; 2、【添加应用】浏览需要调用独显的软件安装目录&#xff0c;并打开…

yg校园易购电商系统(Go+Vue)

校园易购二手平台系统 GitHub项目地址&#xff1a;https://github.com/xzhHas/yg 文章目录 校园易购二手平台系统一、技术栈简介二、快速开始1、安装本系统使用到的插件&#xff0c;这里推荐使用docker安装&#xff0c;此操作皆在ubuntu系统下操作&#xff0c;如果是其他系统只…

Rust基础学习-Rust宏

Rust中的宏是生成另一段代码的一段代码。可以根据输入生成代码&#xff0c;简化重复模式&#xff0c;使得代码更加简洁。比如我们一直在用的println!,vec!,panic!都是宏。 创建宏 可以使用macro_rules!创建一个宏&#xff1a; macro_rules! macro_name {(...) > {...} }这…