【链表】Leetcode 61. 旋转链表【中等】

news2024/11/15 15:57:58

旋转链表

  • 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例 1:

在这里插入图片描述
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

解题思路

要将链表每个节点向右移动 k 个位置:

  • 计算链表长度:首先遍历链表以获取其长度 n。
  • 计算有效移动次数:因为旋转长度超过链表长度时会回到原点,所以有效的移动次数为 k % n。
  • 找到新的链表头和尾:
    新的链表尾在从头开始的第 (n - k % n - 1) 个节点。
    新的链表头在从头开始的第 (n - k % n) 个节点。
  • 断开并连接链表:将新尾节点的 next 指针设为 null,将旧的尾节点的 next 指向旧的头节点,形成一个新的链表。

Java实现

public class RotateRightLinked {
    public static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
    }

    public ListNode rotateRight(ListNode head, int k) {
        if (head == null || head.next == null || k == 0) {
            return head;
        }

        // 计算链表长度
        ListNode oldTail = head;
        int n = 1;
        while (oldTail.next != null) {
            oldTail = oldTail.next;
            n++;
        }

        // 计算有效的移动次数
        k = k % n;
        if (k == 0) {
            return head;
        }

        // 找到新的尾节点和新的头节点
        ListNode newTail = head;
        for (int i = 0; i < n - k - 1; i++) {
            newTail = newTail.next;
        }
        ListNode newHead = newTail.next;

        // 断开链表并连接
        newTail.next = null;
        oldTail.next = head;

        return newHead;
    }

    public static void main(String[] args) {
        RotateRightLinked rotateRightLinked = new RotateRightLinked();

        // 创建示例链表 1->2->3->4->5
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);
        head.next.next.next = new ListNode(4);
        head.next.next.next.next = new ListNode(5);

        // 旋转链表
        ListNode newHead = rotateRightLinked.rotateRight(head, 2);
        printList(newHead); // 输出: 4->5->1->2->3
    }

    // 辅助方法:打印链表
    public static void printList(ListNode head) {
        ListNode current = head;
        while (current != null) {
            System.out.print(current.val);
            if (current.next != null) {
                System.out.print("->");
            }
            current = current.next;
        }
        System.out.println();
    }
}

时间空间复杂度

  • 时间复杂度:O(n),其中 n 是链表的节点数。需要遍历链表两次,一次计算长度,另一次找到新的头和尾。
  • 空间复杂度:O(1)

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

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

相关文章

抖店类目错放怎么办?怎么改类目?快速解决抖店类目错放问题

大家好&#xff0c;我是电商花花。 我们运营抖音小店的时候&#xff0c;都知道不要放错类目&#xff0c;也知道放错类目的后果&#xff0c;类目错放可能导致商品无法在正确的类目中展示&#xff0c;从而影响到商品的一个曝光率。 严重的话还被平台扣分&#xff0c;扣保证金&a…

【大学物理】期末复习笔记总结

1-6章&#xff08;第2版&#xff09;以下是鄙人期末复习时总结的笔记&#xff0c;希望可以帮到大家 第一章&#xff1a; 第二章&#xff1a; 第三章&#xff1a; 第四章&#xff1a; 第五章&#xff1a; 第六章&#xff1a;

安泰电子:高压功率放大器应用场合介绍

高压功率放大器是一种电子设备&#xff0c;用于将低电压信号放大到较高电压水平&#xff0c;以满足各种应用需求。它在多个领域中具有广泛的应用&#xff0c;包括科学研究、工业生产、通信技术以及医疗设备。下面安泰电子将介绍高压功率放大器的应用场合。 科学研究 高压功率放…

SpringBoot自动装配源码

自动装配&#xff1a; 实际上就是如何将Bean自动化装载到IOC容器中管理&#xff0c;Springboot 的自动装配时通过SPI 的方式来实现的 SPI&#xff1a;SpringBoot 定义的一套接口规范&#xff0c;这套规范规定&#xff1a;Springboot 在启动时会扫描外部引用 jar 包中的META-IN…

有一个3x4的矩阵,求矩阵中所有元素中的最大值。要求用函数处理

解此题的算法已在之前的文章中介绍&#xff0c;详见&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/139181787 编写程序&#xff1a; 运行结果&#xff1a;

基于微信小程序+ JAVA后端实现的【医院挂号预约系统】 设计与实现 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 《基于微信小程序的医院挂号预约系统设计与实现》 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; Java, SSM框架数据库&#xff1a; MySQL前端技术&#xff1a; 微信小程序, uni-app 项目展示 全文概括 本…

一文解析恢复删除的文件:分享10个电脑数据恢复软件

电脑文件误删除&#xff0c;不仅让我们感到焦虑&#xff0c;还可能丢失重要的数据。只要使用正确的数据恢复软件&#xff0c;有可能成功恢复被删除的文件。本文将分享10个电脑数据恢复软件。 1、嗨格式数据恢复大师 一款免费预览的数据恢复软件&#xff0c;可以帮助你恢复从硬…

Apifox 更新|编排模式、Markdown 编辑器升级、自动申请 SSL 证书、用户反馈问题优化

Apifox 新版本上线啦&#xff01; 看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; 自动化测试新增「编排模式」Markdown 编辑器全新升级返回响应直接预览 PDF 及视频自动申请 SSL 证书支持配置自定义域名的子目录流式接口支持筛选和清…

RocketMQ 主从复制原理深度解析

提到主从复制&#xff0c;我们可能立马会联想到 MySQL 的主从复制。 MySQL 主从复制是 MySQL 高可用机制之一&#xff0c;数据可以从数据库服务器主节点复制到一个或多个从节点。 这篇文章&#xff0c;我们聊聊 RocketMQ 的主从复制&#xff0c;希望你读完之后&#xff0c;能…

与苹果力杠?微软AI PC全面升级

KlipC报道&#xff1a;5月21日&#xff0c;在召开的Build开发者前瞻活动中&#xff0c;微软CEO称全面升级AI PC&#xff0c;将Copilot融入Windows 11系统&#xff0c;GPT-4o 模型加持。 微软称即将发布全新款Surface电脑&#xff0c;将采用其Copilot标准&#xff0c;以支持人工…

IND-ID-CPA 和 IND-ANON-ID-CPA Game

Src: https://eprint.iacr.org/2017/967.pdf

【web网页官网】原创200套html+css网页制作尽在IT黄大大官网(持续更新中)

200套HTMLCSS网页制作开发 &#x1f354;涉及知识&#x1f964;写在前面&#x1f308; 网站效果 (持续更新...)&#x1f367; 一、涉及主题&#x1f333;二、具体访问方式访问入口1&#xff1a;威信公众号【IT黄大大】访问入口2、访问网址访问入口3、直接点击下面链接访问入口4…

操作教程|通过DataEase开源BI工具对接金山多维表格

前言 金山多维表格是企业数据处理分析经常会用到的一款数据表格工具&#xff0c;它能够将企业数据以统一的列格式整齐地汇总至其中。DataEase开源数据可视化分析工具可以与金山多维表格对接&#xff0c;方便企业更加快捷地以金山多维表格为数据源&#xff0c;制作出可以实时更…

交流负载箱:电力系统的稳定利器

交流负载箱是电力系统中的一种重要设备&#xff0c;主要用于模拟电网中的负载情况&#xff0c;以便对电力系统进行各种性能测试和分析。它是电力系统的稳定利器&#xff0c;对于保障电力系统的稳定运行起着至关重要的作用。 交流负载箱可以模拟电网中的负载情况&#xff0c;为电…

灵狐剪辑软件,视频AI剪辑+去水印裁剪+视频 分割+批量合成+智能混剪(教程+软件)

1.介绍&#xff1a; 【灵狐剪辑】是一款视频编辑工具&#xff0c;能够帮助用户轻松地制作出专业级别的视频作品。这款软件拥有丰富的视频编辑功能&#xff0c;包括剪辑、合并、添加特效、调整音频等&#xff0c;让用户能够充分发挥创意&#xff0c;打造出独具特色的视频内容。…

【Django】从零开始学Django【2】

五. CBV视图 Django植入了视图类这一功能&#xff0c;该功能封装了视图开发常用的代码&#xff0c;无须编写大量代码即可快速完成数据视图的开发&#xff0c;这种以类的形式实现响应与请求处理称为CBV(Class Base Views)。 1. 数据显示视图 数据显示视图是将后台的数据展示…

深圳比创达EMC|EMI电磁干扰行业:行业发展的关键与挑战

在当今的高科技时代&#xff0c;电子产品无处不在&#xff0c;它们为我们的生活带来了极大的便利。然而&#xff0c;随着电子设备的普及和集成度的提高&#xff0c;电磁干扰&#xff08;EMI&#xff09;问题也日益凸显。 一、EMI电磁干扰行业&#xff1a;无处不在的挑战 电磁…

人脸防欺骗——基于皮肤斑块的快速安全的生物识别实现人脸识别防欺骗方法

1. 概述 深度学习的进步促使面部识别技术在许多领域得到应用&#xff0c;例如在线身份验证&#xff08;eKYC&#xff09;和电子设备的安全登录。面部识别是一种生物识别技术&#xff0c;对安全性要求很高。近年来&#xff0c;为了提高人脸识别技术的可靠性&#xff0c;人们引入…

迈向F5G-A,开启全光万兆新时代——南通移动完成全市首个50G-PON技术验证

近日&#xff0c;南通移动在崇川区完成全市首个50G-PON万兆技术现网验证&#xff0c;标志着南通成为首批具备F5G-A(The 5th GenerationFixed Network-advanced)的万兆光网城市&#xff0c;使其成为网速最快、覆盖最全、时延最低的城市之一。 作为全光万兆的关键技术&#xff0c…

sonar3 使用 api/measures/componet 获取代码当,Java实现

最近团队在做一个技术架构相关的优化&#xff0c;当前的目标是想要通过代码量&#xff0c;系统架构入手。先统计到部门的代码量&#xff0c;如何进行代码行数的统计呢&#xff0c;因为我们采用的是Java技术栈&#xff0c;我就Java技术栈进行说明。 1、如何统计代码行数 要统计…