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

leetcode刷题日记——旋转链表

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • 方法一,通过一个额外的数组去记录原链表的数据及其位置,然后通过数学算出旋转后各个值的位置去复制
  • 其中 k 可能大于链表长度,所以要先将其对链表长度取余
  • 运行如下
    在这里插入图片描述
struct ListNode* rotateRight(struct ListNode* head, int k) {if (head == NULL || head->next == NULL || k == 0)return head;int sum=0;struct ListNode* temp=head;while(temp){temp=temp->next;sum++;}k=k%sum;temp=head;int* nums=(int*)malloc(sum*sizeof(int));for(int i=0;i<sum;i++){nums[i]=temp->val;temp=temp->next;}temp=head;for(int i=0;i<sum;i++){temp->val=nums[(i-k+sum)%sum];temp=temp->next;}return head;
}
  • 方法二、循环链表,我们可以先将链表的尾部指向头部,形成一个循环链表
    • 这样旋转链表,就是将倒数第 k 个节点作为头结点
  • 运行如下

在这里插入图片描述

struct ListNode* rotateRight(struct ListNode* head, int k) {if (head == NULL || head->next == NULL || k == 0)return head;    struct ListNode* temp=head;int len=1,i=1;while(temp->next){temp=temp->next;len++;}temp->next=head;k%=len;while(i<len-k){head=head->next;i++;}temp=head;head=head->next;temp->next=NULL;return head;
}

[ 官方题解 ]:

  • 方法一:闭合为环,即上述方法二
http://www.xdnf.cn/news/453673.html

相关文章:

  • 深入理解Java HotSpot中的即时编译
  • 规控算法分类
  • 【Vue.js 的核心魅力:深入理解声明式渲染】
  • 学习黑客NFC技术详解
  • 互联网协议的多路复用、Linux系统的I/O模式
  • 【FileZilla】sftp协议的数据传输上传和下载
  • 软考软件设计师中级——软件工程笔记
  • QT---信号与槽
  • scons user 3.1.2
  • hls 的使用方式
  • ICML-2024《Image Clustering with External Guidance》
  • PADS入门笔记【一】
  • 基于etcd的分布式任务调度系统:设计、实现与实战经验
  • CS016-2-unity ecs
  • 计算机系统结构——Cache性能分析
  • 苹果处理器“仿生“命名背后的营销策略与技术创新
  • 【ROS2】报错记录及对应解决方案
  • Open3D 体素化下采样
  • 当DeepSeek遇上百年医院:解码AI医疗落地实践
  • 香橙派/树莓派读取GY39数据
  • Spring Boot 日志
  • 仿真每日一练 | 多刚体动力学分析中的自由度问题
  • 领麦微红外温度传感器:发面机非接触测温
  • AI短期学习计划(持续完善更新)
  • 基于CETOL 6σ的生产不良判定与故障分析技术应用
  • Android Framework学习五:APP启动过程原理及速度优化
  • Made with Unity | 拓展“双点”宇宙版图
  • 再来1章linux系列-17 ssh sshd sshd非对称加密(密钥加密)‌SSH对称加密组件/流程
  • 树莓派3B+ wiringPi库安装
  • 【golang】网络数据包捕获库 gopacket