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
.
k=2 就是向右移動2次
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 struct ListNode* rotateRight(struct ListNode* head, int k) { 9 struct ListNode *cur; 10 cur = head; 11 int n = 1; 12 if(head == NULL) 13 return NULL; 14 while(cur->next != NULL) //求鏈表長度,把cur定位到尾結點 15 { 16 cur = cur->next; 17 n++; 18 } 19 k = n - k % n; //注意K有可能大於鏈表長度 要取余數 20 cur->next = head; 21 cur = head; 22 k--; 23 while(k) //cur移動到斷開前的位置 24 { 25 cur = cur->next; 26 k--; 27 } 28 head = cur->next; 29 cur->next = NULL; 30 return head; 31 }