動機

比array好多了

Problem

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 = 2Output: [4,5,1,2,3]

Example 2:

Input: head = [0,1,2], k = 4Output: [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

Sol

直接slice後面接到前面

class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        now = head
        size = 0
        while now:
            size, now = size+1, now.next
        if size == 0:
            return head
        k = k%size
        
        prev = head
        for _ in range(size-k-1):
            prev = prev.next
        back_end = prev
        prev = prev.next
        back_end.next = None
        
        if prev:
            prev_end = prev
            while prev_end.next:
                prev_end = prev_end.next
            prev_end.next = head
            return prev
        else:
            return head