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
.
struct ListNode { int m_nKey; ListNode* next; } class Solution{ public: ListNode* rotateRight(ListNode *head, int k){ if(!head) return NULL; int n = 0; ListNode *cur = head; while(cur){ ++n; cur = cur->next; } k %= n; ListNode *fast = head, *slow = head; for(int i = 0; i < k; ++i) { if(fast) fast = fast->next; } if(!fast) return head; while(fast->next){ fast = fast->next; slow = slow->next; } fast->next = head; fast = slow->next; slow->next = NULL; return fast; } };