LeetCode 61 旋转链表

98 阅读1分钟

参加了 kkb 的门徒培训,想要记录下自己的成长过程。每天一篇,坚持不断更 --- 2022.3.7

题目描述

给你一个链表的头节点 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

解题思路

旋转链表是不是很像我们把其收尾连接起来,然后再将其某一点断开。实现下

var rotateRight = function(head, k) {
    // 空值判断
    if (!head) return null

    // 获取链表长度
    let n = 1
    let p = head

    while (p.next) {
        p = p.next
        n = n + 1
    }

    // 使其形成一个环
    p.next = head

    // 查找其断开点
    k = k % n
    k = n - k

    while (k--) {
        p = p.next
    }

    // 断开点
    head = p.next
    p.next = null
    return head
};