# 61. Rotate List

#### Medium

***

Given the `head` of a linked list, rotate the list to the right by `k` places.

&#x20;

**Example 1:**

![](https://assets.leetcode.com/uploads/2020/11/13/rotate1.jpg)

```
Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]
```

**Example 2:**

![](https://assets.leetcode.com/uploads/2020/11/13/roate2.jpg)

```
Input: head = [0,1,2], k = 4
Output: [2,0,1]
```

&#x20;

**Constraints:**

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

```python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
        if not head:
            return
        last = None
        length = self.get_length(head, last)
        k = k % length
        if k == 0:
            return head
        break_index = length - k
        index = 1
        temp = head
        prev = None
        while index <= break_index:
            prev = temp
            temp = temp.next
            index += 1
        prev.next = None
        start = temp
        while temp.next:
            temp = temp.next
        temp.next = head
        return start
        
    def get_length(self, head, last):
        count = 0
        while head:
            last = head
            head = head.next
            count += 1
        return count
```
