首页 > 其他分享 >LeetCode 61旋转链表

LeetCode 61旋转链表

时间:2022-10-18 22:11:18浏览次数:104  
标签:p2 结点 head 旋转 链表 61 LeetCode 指针

LeetCode 61旋转链表

题目描述:给你一个链表的头节点 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]
提示:
链表中节点的数目在范围 [0, 500] 内
-100 <= Node.val <= 100 0 <= k <= 2 * 109
链接:https://leetcode.cn/problems/rotate-list

方法一:将链表首尾相连

  1. 遍历链表获得深度deep
  2. 对k取模得到最小旋转次数_k
  3. 将链表首尾相连后,通过head指针顺时针旋转cnt - k,得到旋转后的链表的头指针
    img

方法二:双指针

这种方法看似很难理解,其实不然。旋转k次,实际上就是把链表尾部k个结点放到链表的前头。例如:

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

不难观察出,其实就是把长度为3的子链表[3,4,5]放在了[1,2]的前面。
所以,我们需要两个指针,在旋转链表前,将一个指向链表旋转后的尾部结点,另一个指向链表旋转前的尾部结点,同时,这两个结点距离为k(这里的k是取模后的k,即 0 <=k <= cnt)

图示操作

  1. 定义两个指针(p1, p2),共同指向第一个结点
  2. 让p2先向右移动k个结点
  3. 随后p1,p2同步移动
  4. 直到p2移动到最后一个结点
    img
    这里我们只需要将 p1 = NULL, p2 = head就可以得到向右旋转k次的链表啦

    标签:p2,结点,head,旋转,链表,61,LeetCode,指针
    From: https://www.cnblogs.com/yousa/p/16801657.html

相关文章

  • 只用一个头结点一个头指针的链表写法
    #include<iostream>#include<stdlib.h>usingnamespacestd;structNode{intdata;structNode*next;};intmain(){intnum,n;cin>>num;......
  • LGP5616口胡
    上个星期kds给我看的题,第一眼不会做,然后稍微想了一下还是秒了。感觉还是太简单了。考虑到值域只有\(300\),我们这里假设\(n\)就是\(300\)。重复的肯定开个桶记下来。......
  • 链表实现队列——————数据结构作业
    作业code2:-仿照作业code1的功能,将课本上链表的实现队列能完整实现-需要通过main函数调用并能进行友好的人机交互输入​​作业code1​​链表实现队列的代码:#include<bits/......
  • 560数据库连接池_c3p0_基本使用and 561数据库连接池_c3p0_配置演示
    数据库连接池_c3p0_基本使用(1)步骤导入两个jar包c3po-o.9.5.2.jar   mchange-commons-java-o.2.12.jar还需要导入数据库的驱动jar包mysql-connector-java-5.1.47......
  • FZU 1061 矩阵连乘
     Problem1061矩阵连乘Accept:445    Submit:1699TimeLimit:1000mSec    MemoryLimit:32768KB ProblemDescription给定n个矩阵{A1,A2,...,An},考察这n......
  • LeetCode 169. Majority Element
    ​​题目​​题意:找出数组里重复最多的元素,重复最多是指数量大于n/2的,题解:题目说一定存在答案,不用额外的内存空间,怎么做呢?其实很简单,重复最多的元素的数量大于剩下所有元素......
  • LeetCode 168. Excel Sheet Column Title
    ​​题目​​classSolution{public:stringconvertToTitle(intn){stringans="";while(n){i......
  • LeetCode 171. Excel Sheet Column Number
    ​​题目​​classSolution{public:inttitleToNumber(strings){intans=0;for(inti=0;i<s.length();i++){ans*=26;......
  • LeetCode 167. Two Sum II - Input array is sorted(双指针)
    ​​题目​​题意:找出数组里两个数字之和为指定数字的两个下标。题解:双指针classSolution{public:vector<int>twoSum(vector<int>&numbers,inttarget){......
  • LeetCode 90. Subsets II
    ​​题目​​dfsclassSolution{public:vector<vector<int>>ans;vector<int>res;vector<vector<int>>subsetsWithDup(vector<int>&nums){......