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