Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given1->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) return NULL; ListNode *cur = head; int n = 0; while(cur) { cur = cur->next; ++n; } ListNode *slow = head; ListNode *fast = head; k %= n; 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; }};