Rotate a Linked List (LC-0061)
class Solution:
def rotateRight(self, head, k):
def revk(node, k):
prev = None
curr = node
while k > 0 and curr:
temp = curr.next
curr.next = prev
prev = curr
curr = temp
k = k - 1
return prev, curr
L = 0
temp = head
while temp: temp, L = temp.next, L + 1
l1, l2 = revk(head, 0 if L == 0 else L - (k % L))
l1, _ = revk(l1, 501)
if not l2:
return l1
res = l2
while res and res.next:
res = res.next
res.next = l1
return l2