当前位置: 首页 > news >正文

61.旋转链表--字节跳动

你应该比你现在强得多

题目描述

给定单链表,要求返回向右移动K位后的新链表

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

思路分析

  1. 计算链表的长度

  2. 计算实际需要移动的步数

  3. 找到新的头节点

  4. 断开链表并重新连接

完整代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* rotateRight(ListNode* head, int k) {// 边界条件检查:如果链表为空、只有一个节点或 k 为 0,直接返回原链表if (head==NULL || head->next==NULL || k == 0) {return head;}// 1. 计算链表的长度int n = 1; // 链表长度初始化为 1,因为从第一个节点开始ListNode* tail = head; // tail 指针用于找到链表的末尾节点while (tail->next) { // 遍历链表直到最后一个节点tail = tail->next; // 移动到下一个节点n++; // 计数器增加}// 2. 计算实际需要移动的步数k = k % n; // k 对链表长度取模,避免不必要的重复旋转if (k == 0) {return head; // 如果 k 为 0,说明不需要旋转,直接返回原链表}// 3. 找到新的头节点ListNode* newTail = head; // newTail 指针用于找到旋转后新的尾节点for (int i = 0; i < n - k - 1; i++) { // 移动到新尾节点的位置(n - k - 1)newTail = newTail->next; // 移动到下一个节点}ListNode* newHead = newTail->next; // 新头节点是新尾节点的下一个节点// 4. 断开链表并重新连接newTail->next = nullptr; // 断开新尾节点与新头节点的连接tail->next = head; // 将原链表的尾节点连接到原链表的头节点,形成环return newHead; // 返回旋转后的新头节点}
};

分析逻辑

1. 边界条件检查

  • 如果链表为空(head==NULL),或者链表只有一个节点(head->next==NULL),或者 k 为 0,直接返回原链表。

  • 这些情况下链表不需要进行任何旋转操作。

2. 计算链表长度

  • 使用 tail 指针从链表头开始遍历,直到链表的末尾(tail->nextnullptr)。

  • 在遍历过程中,计数器 n 记录链表的长度。

3. 计算实际移动步数

  • 由于旋转 k 次相当于旋转 k % n 次,因为旋转 n 次后链表会回到原来的状态。

  • 如果 k % n == 0,说明不需要旋转,直接返回原链表。

4. 找到新的头节点

  • 使用 newTail 指针从链表头开始,移动 n - k - 1 步,到达旋转后的新尾节点。

  • newTail->next 就是旋转后的新头节点。

5. 断开链表并重新连接

  • 将新尾节点 (newTail) 的 next 指针设为 nullptr,断开与新头节点的连接。

  • 将原链表的尾节点 (tail) 的 next 指针指向原链表的头节点 (head),形成一个新的链表环。

  • 返回新的头节点 newHead,完成链表的旋转操作。

总结

  • 该算法通过计算链表长度和实际旋转步数,找到新的头节点和尾节点,并重新连接链表,实现链表的右旋转。

  • 时间复杂度为 O(n),空间复杂度为O(1) 。

相关文章:

61.旋转链表--字节跳动

你应该比你现在强得多 题目描述 给定单链表&#xff0c;要求返回向右移动K位后的新链表 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]思路分析 计算链表的长度 计算实际需要移动的步数 找到新的头节点 断开链表并重新连接 完整代码 /*** Defini…...

verilog笔记

Verilog学习笔记&#xff08;一&#xff09;入门和基础语法BY电棍233 由于某些不可抗拒的因素和各种的特殊原因&#xff0c;主要是因为我是微电子专业的&#xff0c;我需要去学习一门名为verilog的硬件解释语言&#xff0c;由于我是在某西部地区的神秘大学上学&#xff0c;这所…...

c++中sleep是什么意思(不是Sleep() )

sleep 函数在 C 语言中用于暂停程序执行指定的秒数&#xff0c;语法为 sleep(unsigned int seconds)。当 seconds 为 0 时&#xff0c;函数立即返回&#xff0c;否则函数将使进程暂停指定的秒数&#xff0c;并返回实际暂停的时间。 sleep 函数在 C 中的含义 sleep 函数是 C 标…...

Uniapp 开发中遇到的坑与注意事项:全面指南

文章目录 1. 引言Uniapp 简介开发中的常见问题本文的目标与结构 2. 环境配置与项目初始化环境配置问题解决方案 项目初始化注意事项解决方案 常见错误与解决方案 3. 页面与组件开发页面生命周期注意事项示例代码 组件通信与复用注意事项示例代码 样式与布局问题注意事项示例代码…...

Dify安装教程:Linux系统本地化安装部署Dify详细教程

1. 本地部署 Dify 应用开发平台 环境:Ubuntu(24.10) docker-ce docker compose 安装 克隆 Dify 源代码至本地环境: git clone https://github.com/langgenius/dify.git 启动 Dify: cd dify/docker cp .env.example...

rtsp rtmp 跟 http 区别

SDP 一SDP介绍 1. SDP的核心功能 会话描述&#xff1a;定义会话的名称、创建者、时间范围、连接地址等全局信息。媒体协商&#xff1a;明确媒体流的类型&#xff08;如音频、视频&#xff09;、传输协议&#xff08;如RTP/UDP&#xff09;、编码格式&#xff08;如H.264、Op…...

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

物体识别系统(识别图片中的物体)

这是一个基于 PyTorch 和 PyQt5 的物体识别程序&#xff0c;使用 Faster R-CNN 模型来识别图片中的物体&#xff0c;并通过图形界面展示识别结果。 1.用户界面 主窗口&#xff1a;包含加载图片、识别、清除按钮&#xff0c;以及图片显示区域和结果展示区域。 图片显示&#…...

数据表的存储过程和函数介绍

文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合&#xff0c;然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…...

【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)

【DeepSeek背后的技术】系列博文&#xff1a; 第1篇&#xff1a;混合专家模型&#xff08;MoE&#xff09; 第2篇&#xff1a;大模型知识蒸馏&#xff08;Knowledge Distillation&#xff09; 第3篇&#xff1a;强化学习&#xff08;Reinforcement Learning, RL&#xff09; 第…...

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 &#x1f30d;一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 &#x1f30d;二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…...

[特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)

Day 6&#xff1a;位运算&#xff08;异或性质、二进制操作&#xff09; &#x1f4d6; 一、位运算简介 位运算是计算机底层优化的重要手段&#xff0c;利用二进制操作可以大大提高运算速度。常见的位运算包括&#xff1a; 与&#xff08;&&#xff09;&#xff1a;a &am…...

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction

论文网址&#xff1a;[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码&#xff1a;GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …...

LTO优化详解

嵌入式开发过程中的LTO优化是什么意思&#xff1f;能够用来解决什么问题&#xff1f;它都优化了哪些&#xff1f;仅开启LTO真的可以优化SIZE的问题吗? 请分别回答我刚才提到的问题&#xff1f; 嗯&#xff0c;用户问关于嵌入式开发中的LTO优化&#xff0c;我需要详细解释这个概…...

分布式事务三阶段协议

分布式事务的三阶段分别是准备阶段、预提交阶段和提交 / 回滚阶段&#xff0c;以下是详细介绍&#xff1a; 三阶段提交协议可以理解为两阶段提交协议的改良版&#xff0c;是在协调者和参与者中都引入超时机制&#xff0c;并且把两阶段提交协议的第一个阶段分成了两步: 询问&am…...

LLaMA-Factory|微调大语言模型初探索(4),64G显存微调13b模型

上篇文章记录了使用lora微调deepseek-7b&#xff0c;微调成功&#xff0c;但是微调llama3-8b显存爆炸&#xff0c;这次尝试使用qlora微调HQQ方式量化&#xff0c;微调更大参数体量的大语言模型&#xff0c;记录下来微调过程&#xff0c;仅供参考。 对过程不感兴趣的兄弟们可以直…...

常用高压缩率的视频容器格式,并进行大比例压缩

常用的高压缩率视频容器格式,包括*.mp4 、*.mkv、*.webM等。     容器格式本身并不直接决定压缩率,而是取决于容器中所使用的视频编码格式等因素。不过,在常见的视频容器格式中,一些容器在搭配特定编码格式时,通常能表现出较高的压缩效率,以下是相关介绍: 1 MKV格式 …...

代码编译(词法义)

1.预处理 (Preprocessing)&#xff1a; 在这个阶段&#xff0c;编译器会处理所有以 # 开头的指令&#xff0c;如 #include、#define 等。它会把头文件的内容插入到源代码中&#xff0c;进行宏替换等预处理操作&#xff0c;生成一个纯净的代码文件。 3.词法分析 (Lexical Analy…...

android,flutter 混合开发,pigeon通信,传参

文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性&#xff0c;安全性&#xff0c;性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle&#xff0c;添加 Flutter module3. 在 Android app 的 build.gradl…...

at32f403a rt thread led基础bsp工程测试

1.led工程官方bsp使用 导出一个独立的AT32F403A的BSP工程 下载RTT源代码 gitee更新较慢 https://gitee.com/rtthread/rt-thread github版本更新最新 https://github.com/RT-Thread/rt-thread. 切换到V5.1.0分支(使用一个发布版本可以避免不必要的bug) 导出一个独立的AT32BSP…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

Canal环境搭建并实现和ES数据同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安装&#xff0c;启动端口11111、8082&#xff1a; 安装canal-deployer服务端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...