Medium
Given the head
of a linked list, rotate the list to the right by k
places.
Example 1:
Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]
Example 2:
Input: head = [0,1,2], k = 4
Output: [2,0,1]
Constraints:
[0, 500]
.-100 <= Node.val <= 100
0 <= k <= 2 * 109
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function rotateRight(head: ListNode | null, k: number): ListNode | null {
if (!head || k === 0) {
return head
}
let tail: ListNode | null = head
let count = 1
while (tail.next) {
count++
tail = tail.next
}
let times = k % count
if (times === 0) {
return head
}
let temp: ListNode | null = head
for (let i = 1; i < count - times; i++) {
temp = temp!.next
}
let newHead = temp!.next
temp!.next = null
tail!.next = head
return newHead
}
export { rotateRight }