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 * 10^9$

解析

先连成环,再在合适位置断开。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var rotateRight = function (head, k) {
if (!head || !head.next || k === 0) return head;
let len = 1, tail = head;
while (tail.next) { tail = tail.next; len++; }
k %= len;
if (k === 0) return head;
tail.next = head; // 连成环
let steps = len - k;
let newTail = head;
for (let i = 1; i < steps; i++) newTail = newTail.next;
const newHead = newTail.next;
newTail.next = null;
return newHead;
};

61.旋转链表
https://leetcode.lz5z.com/61.rotate-list/
作者
tickli
发布于
2023年11月8日
许可协议