给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

示例一:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL

示例二:
输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL

思路:其实这题只要知道一个核心问题就行了:如果旋转时的移动次数等于链表的结点数,那么他旋转结束后依旧是原来的那个链表。比如一个链表有5个结点,向右移动5次,则他还是原来的链表。知道了这个技巧,就能解决移动次数大于结点数的问题,也就是我认为的本题的难点。
举例:如果一个链表有5个结点,向右移动19次,我们可以怎么做?可以把19分解为先移动5次,再移动5次,再移动5次,最后移动4次,前三次移动都是不变的,就相当于只移动了4次。其实我们已经很清楚了,上述过程其实就是个求余的过程。19 % 5 = 4,移动19次和4次时一样的。

ListNode* rotateRight(ListNode* head, int k) {if(head == NULL || head -> next == NULL) return head;ListNode *p = head;int len = 1;while(p -> next != NULL){++len;                //表长p = p -> next;}                         //判断条件是p -> next != NULL,最后循环结束p可以直接指向最后一个结点if(len == k) return head; //相等则说明旋转后还是原来的链表,直接returnif(k > len && k % len == 0) return head; //等于0说明是表长的整倍数,直接returnif(k > len && k % len != 0) k = k % len; //直接把k对表长求余,让移动次数小于表长if(len > k) len = len - k - 1;p -> next = head;         //首位相连p = head;while(len--){p = p -> next;}                         //p指向旋转后应当时头结点的前一个结点head = p -> next;p -> next = NULL;         //p和后面断开return head;}

【中等】Leetcode-旋转链表//题目分析//首尾相连相关推荐

  1. LeetCode链表题目分析

    文章目录 题目 206 反转链表 160 相交链表 21 合并两个有序链表 86 分隔链表 142 环形链表 || 92 反转链表 || 138 复制带随机指针的链表 817 链表组件 数据结构 哈希 ...

  2. LeetCode单链表题目测试代码(只需添加对应题目,本地即可debug)

    本地模拟单链表 package single_listimport ("strconv" )/*** Definition for singly-linked list.* typ ...

  3. 【Leetcode -61.旋转链表 -82.删除排序链表中的重复元素Ⅱ】

    Leetcode Leetcode -61.旋转链表 Leetcode -82.删除排序链表中的重复元素Ⅱ Leetcode -61.旋转链表 题目:给你一个链表的头节点 head ,旋转链表,将链表 ...

  4. 反转链表、旋转链表算法总结

    目录 反转链表(力扣:206) 反转链表 II(力扣:92) 旋转链表(力扣:61) 算法实现 1. 反转链表 题目 反转一个单链表. 思路 该题比较简单.这里涉及到3个节点:前一个节点.当前节点和后 ...

  5. LeetCode 61旋转链表-中等

    给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 输入:head = [0,1, ...

  6. LeetCode:旋转链表【61】

    LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...

  7. 跟我打卡LeetCode 61旋转链表62不同路径63不同路径 II

    原创公众号:bigsai 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 49字母异位词分组&50pow(x,n)&51八皇后 LeetCode打卡 52八皇 ...

  8. LeetCode 61. 旋转链表(python、c++)

    题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出 ...

  9. LeetCode实战:旋转链表

    题目英文 Given a linked list, rotate the list to the right by k places, where k is non-negative. Example ...

最新文章

  1. [转]图解APP的商业模式
  2. 第21节 信息系统及其建设
  3. 微信小程序中嵌套html_微信小程序:web-view嵌套H5实现微信支付功能解决方案及填坑...
  4. metadata model entry in /IWFND/CL_MED_MDL_SVC_GRP
  5. 接口返回的类型是html页面_1.10 PhalApi 2.x 接口文档
  6. 大数据分析有哪些分析方式
  7. King Arthur
  8. 十套精美个人博客网站模板
  9. oracle 体系架构图
  10. excel中实现多条件去重计数
  11. Relatively Prime Graph(贪心+注意数据范围)
  12. ecshop模板如何修改详细图解
  13. win10 uwp 打电话
  14. 极狐GitLab硬实力助力中国开源生态建设
  15. 梦回2008样式原子化:Tailwind是如何让Facebook拜倒在她的石榴裙下?
  16. iOS 渐变色 以及 镂空效果的实现(Mask的妙用)以及镂空文字的实现
  17. 解决某物流企业二维码打印问题
  18. 《华为的冬天》-任正非(2000年)
  19. BottomNavigationView+Navigation 添加底部导航菜单切换时的fragment过渡动画animation
  20. 征服者驱动程序下载_征服者纸上的五种美丽免费字体

热门文章

  1. 计算机软考什么时候出分,2020年计算机软考什么时候出成绩,怎么查成绩?|...
  2. 状态机思路在嵌入式开发中的应用说明及注意事项(普罗米修斯中不少功能节点用了状态机的方法来写)
  3. 聚焦“教-学-评-测-练-管一体化”,推动新型人才培养
  4. 《可转债入门十讲》笔记
  5. html中如何做出生年月日,出生年月日怎么换成生辰八字
  6. step7-- simatic -- PLC - MPI --
  7. (转载)如何成为一个漏洞赏金猎人
  8. CF1647D Madoka and the Best School in Russia(数论,dp,离散化技巧)
  9. 小知识·Git、Github、Gitlab以及Gitee的关系
  10. 【进阶】使用Excel进行回归分析,预测真实值