LeetCode Solutions
61. Rotate List
Time: $O(n)$ Space: $O(1)$
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;
}
};
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;
}
}
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