// 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:

//     The number of nodes in the list is in the range [0, 500].
//     -100 <= Node.val <= 100
//     0 <= k <= 2 * 109

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode}
 */
var rotateRight = function (head, k) {
  let dummyHead = new ListNode(0);
  dummyHead.next = head;
  let current = head,
    size = 0;
  let prev = head;
  while (current && current.next) {
    prev = current;
    current = current.next;
    size++;
  }
  for (let i = 0; i < k % (size + 1); i++) {
    let trav = 0;
    prev.next = null;
    current.next = dummyHead.next;
    dummyHead.next = current;
    while (trav < size) {
      prev = current;
      current = current.next;
      trav++;
    }
  }
  return dummyHead.next;
};