Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL
and k = 2
,
return 4->5->1->2->3->NULL
.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight(struct ListNode* head, int k)
{
struct ListNode *first, *second, *newhead;
int i;
if (!head) return head;
first = second = head;
int total = 0;
while (first) {
first = first->next;
total++;
}
k %= total;
i = k;
first = head;
while (second && i--) second = second->next;
if (!k || !second) return head;
while (second->next) {
first = first->next;
second = second->next;
}
newhead = first->next;
first->next = NULL;
second->next = head;
head = newhead;
return newhead;
}