Leetcode 61 Rotate List
Given the head of a linked list, rotate the list to the right by k places.
Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]
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