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;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k)
{
if(head == NULL)
return head;
ListNode* temp = head;
int count = 0;
while(temp != NULL)
{
count++;
temp = temp->next;
}
k = k%count;
if(k == 0)
return head;
ListNode* pre = head;
ListNode* end = head;
int i=1;
while(i<k && end->next!=NULL)
{
end = end->next;
i++;
}
if(i != k)
return head;
else
{
ListNode* temp;
while(end->next!=NULL)
{
temp = pre;
pre = pre->next;
end = end->next;
}
temp->next = end->next;
end->next = head;
return pre;
}
}
};原文地址:http://blog.csdn.net/shaya118/article/details/42642055