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可能会大于链表的长度,坑爹!
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 if (head == NULL) return NULL; 13 ListNode *tail = head, *kth = head; 14 int n = 0; 15 while (tail != NULL) { 16 ++n; 17 tail = tail->next; 18 } 19 tail = head; 20 k %= n; 21 for (int i = 0; i < k; ++i) { 22 tail = tail->next; 23 } 24 while (tail != NULL && tail->next != NULL) { 25 tail = tail->next; 26 kth = kth->next; 27 } 28 if (tail != NULL) { 29 tail->next = head; 30 head = kth->next; 31 kth->next = NULL; 32 } 33 return head; 34 } 35 };