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

【算法专题--链表】旋转链表 -- 高频面试题(图文详解,小白一看就懂!!)

目录

一、前言

二、题目描述  

三、解题方法 

⭐解题思路---闭合为环

🍍 案例图解  

四、总结与提炼 

五、共勉   


一、前言

        旋转链表 这道题,可以说是--链表专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会从多个方面考察这道题目,所以大家需要对这道题目非常熟悉哦!!
       本片博客就来详细的讲讲解一下 旋转链表 的实现方法,让我们的面试变的更加顺利!!! 

二、题目描述  

题目链接:61. 旋转链表 - 力扣(LeetCode)

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

三、解题方法 

⭐解题思路---闭合为环

 根据题意,我们可以假设链表是:1−>2−>3−>4−>5,移动位是 k,我们分析如下:

k<5 的情况:实际移动的位数,就是 k 本身。
k>5 的情况:

  • k 是 5 的整数倍:链表不会发生位置变化。
  • k 不是 5 的整数倍:实际移动位数是 k%5 的值。

知道了上述的分析,我们很容易就能理清思路,流程如下:

  1. 计算链表的长度
  2. 链表最后一位值的 next 指向原链表首位数字,形成闭环,如下所示:
// 环图
1 -> 2 -> 3 -> 4 -> 5
↑                  ↓
↑                  ↓←  ←  ←  ←  ←  ←   // 线性图
1 -> 2 -> 3 -> 4 -> 5 -> 1 -> 2 -> 3 -> 4 -> 5 -> 1 -> 2 -> 3 -> 4 -> 5 -> ....

 🍍 案例图解  

  • 开始,计算链表的长度,遍历整个链表 

  •  让整个链表形成闭环

  • 旋转 k = 2, cur 指针移动 n-k

  • 建立新的头节点 


复杂度分析: 

时间复杂度:O(n),最坏情况下,我们需要遍历该链表两次。
空间复杂度:O(1)。我们只需要常数的空间存储若干变量。


代码: 

class Solution {
public:ListNode* rotateRight(ListNode* head, int k) {// 当只有 head 节点 和 head->next 节点的时候 ,直接返回 head 即可if(head==nullptr || head->next==nullptr){return head;}// 计算链表长度ListNode* cur = head;int n =1;while(cur->next!=nullptr){cur =cur->next;n++;}// K<n , 实际移动的位数,就是 K 本身// K>n ,k是n的整数倍,链表不变//       K不是5的整数倍,实际移动位数是 K%n的值k = k % n;if(k==0){return head;}// 闭合为环 ,链接头节点// cur 此时的位置在 结尾处cur->next = head;// 找出移动后链表的 最后一个非空节点n = n-k;while(n--){cur = cur->next;}// 建立新的头节点ListNode* newhead = cur->next;cur->next = nullptr;return newhead;}
};

四、总结与提炼 

        最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关 旋转链表 的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握

五、共勉   

        以下就是我对 旋转链表 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 链表专题 的理解,请持续关注我哦!!!  

http://www.lryc.cn/news/386641.html

相关文章:

  • ElasticSearch 和 MySQL的区别
  • Linux部署wordpress站点
  • 实体零售连锁企业如何通过物流接口实现数智化转型升级?
  • AWS EKS上GPU工作负载自动扩缩容的异常排查指南
  • Pytest+Allure+Yaml+Jenkins+Gitlab接口自动化中Jenkins配置
  • 应用及安全
  • 字节流和字符流的相关知识
  • LLM意图识别器实践
  • 常见的反爬手段和解决思路(爬虫与反爬虫)
  • Stable Diffusion【真人模型】:人像光影摄影极限写实真实感大模型
  • java实现图片添加水印
  • CSS规则——font-face
  • 【单片机毕业设计选题24034】-基于STM32的手机智能充电系统
  • [C++][数据结构][图][中][图的遍历][最小生成树]详细讲解
  • 退市新规解读—财务类强制退市
  • 小程序的生命周期使用方法和应用场景
  • 什么是C++模块化系统?C++20的模块化系统。
  • 智慧校园-档案管理系统总体概述
  • 文心一言 VS 讯飞星火 VS chatgpt (290)-- 算法导论21.3 3题
  • 逻辑回归梯度推导
  • Python 使用函数输出一个整数的逆序数
  • 【Linux】Wmware Esxi磁盘扩容
  • 树莓派4B_OpenCv学习笔记15:OpenCv定位物体实时坐标
  • MySQL之如何定位慢查询
  • Open3D 删除点云中重复的点
  • 填报志愿选专业是兴趣重要还是前景重要?
  • python开发基础——day9 函数基础与函数参数
  • STM32——使用TIM输出比较产生PWM波形控制舵机转角
  • 第十五章 集合(set)(Python)
  • 面试-javaIO机制