C++:
/**
* 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) {
if ( k <= 0 || !head || !head -> next ) {
return head;
}
int size = 1;
ListNode *end = head;
for ( ; end && end -> next; ++size ) {
end = end -> next;
}
int move = k % size;
if ( move == 0 ) {
return head;
}
ListNode *previous = head;
for ( int i = 0; i < size - move - 1; ++i ) {
if ( previous && previous -> next ) {
previous = previous -> next;
}
}
ListNode *newHead = previous -> next;
previous -> next = NULL;
end -> next = head;
return newHead;
}
};