参加了 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 <= 1000 <= 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
};