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
import com_github_leetcode.ListNode
/*
* Example:
* var li = ListNode(5)
* var v = li.`val`
* Definition for singly-linked list.
* class ListNode(var `val`: Int) {
* var next: ListNode? = null
* }
*/
class Solution {
fun rotateRight(head: ListNode?, k: Int): ListNode? {
if (head == null || k == 0) {
return head
}
var tail = head
// find the count and let tail points to last node
var count = 1
while (tail != null && tail.next != null) {
count++
tail = tail.next
}
// calculate number of times to rotate by count modulas
val times = k % count
if (times == 0) {
return head
}
var temp = head
// iterate and go to the K+1 th node from the end or count - K - 1 node from
// start
var i = 1
while (i <= count - times - 1 && temp != null) {
temp = temp.next
i++
}
var newHead: ListNode? = null
if (temp != null && tail != null) {
newHead = temp.next
temp.next = null
tail.next = head
}
return newHead
}
}