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
.
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *rotateRight(ListNode *head, int k) { 12 13 int size = 0; 14 ListNode *p = head; 15 while(p != NULL) 16 { 17 size++; 18 p = p->next; 19 } 20 21 if(size == 0 || size == 1) 22 return head; 23 24 k = k % size; 25 for(int i = 0; i < k; i++) 26 { 27 ListNode *pretail = head; 28 while(pretail->next->next != NULL) 29 pretail = pretail->next; 30 31 ListNode *tail = pretail->next; 32 pretail->next = NULL; 33 tail->next = head; 34 head = tail; 35 } 36 37 return head; 38 } 39 };