# 61. Rotate List

• Time: $O(n)$
• Space: $O(1)$
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution { public: ListNode* rotateRight(ListNode* head, int k) { if (!head || !head->next || k == 0) return head; ListNode* tail; int length = 1; for (tail = head; tail->next; tail = tail->next) ++length; tail->next = head; // circle the list const int t = length - k % length; for (int i = 0; i < t; ++i) tail = tail->next; ListNode* newHead = tail->next; tail->next = nullptr; return newHead; } }; 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public ListNode rotateRight(ListNode head, int k) { if (head == null || head.next == null || k == 0) return head; int length = 1; ListNode tail = head; for (; tail.next != null; tail = tail.next) ++length; tail.next = head; // circle the list final int t = length - k % length; for (int i = 0; i < t; ++i) tail = tail.next; ListNode newHead = tail.next; tail.next = null; return newHead; } } 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution: def rotateRight(self, head: ListNode, k: int) -> ListNode: if not head or not head.next or k == 0: return head tail = head length = 1 while tail.next: tail = tail.next length += 1 tail.next = head # circle the list t = length - k % length for _ in range(t): tail = tail.next newHead = tail.next tail.next = None return newHead