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:

  • 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.
# 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

Last updated