LeetCode 61旋转链表

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次的链表啦😊
//代码
posted @   YusJade  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示