LeetCode in TypeScript

61. Rotate List

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:

Solution

/**
 * 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 }