/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (!head) return NULL;
int size = 0;
for (ListNode *node = head; node; node = node->next)
size++;
k = k % size;
if (k == 0) return head;
ListNode *tail = head;
for (int i = 0; i < k; i++)
tail = tail->next;
ListNode *pivot = head;
while (tail->next) {
pivot = pivot->next;
tail = tail->next;
}
tail->next = head;
ListNode *ret = pivot->next;
pivot->next = NULL;
return ret;
}
};
Small Case: 4ms
Large Case: 56ms
Time: O(n)
Space: O(1)