Leetcode 61 Rotate List

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

image
Input: head = [1,2,3,4,5], k = 2 Output: [4,5,1,2,3]
image
Input: head = [0,1,2], k = 4 Output: [2,0,1]
  • Soruda bize bir linked list ve k sayısı veriliyor.Bu k sayısı kadar linked listi kaydırmamız isteniyor.
  • İlk olarak linked listin uzunluğunu ve tail yani son elemanı buluruz.
  • Daha sonra verilen k sayısının 0 olması yada linked listen uzun olması durumlarını kontrol ederiz.
  • Daha sonra (lenght - k - 1) kadar giderek yeni şuan linked listin ortasında olan ama kaydırmayı tamamladığımızda linked listin son elemanı olacak olan node buluruz bunun nexti none yaparız.
  • Son olarakta tail nexti head yaparak işlemi bitiririz.
class Solution:

    def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
        if not head:
            return head
        
        #get lenght
        lenght, tail = 1, head
        while tail.next:
            tail = tail.next
            lenght +=1
        
        k = k % lenght
        if k == 0:
            return head
        
        # Move to the pivot and rotate
        cur = head
        for i in range(lenght - k - 1):
            cur = cur.next
        newHead = cur.next
        cur.next = None
        tail.next = head
        return newHead