给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 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 { 11 public: 12 ListNode * rotateRight(ListNode* head, int k) 13 { 14 ListNode *h1 = head; 15 int num = 1; 16 if (head != NULL) 17 { 18 while (h1->next != NULL) 19 { 20 ++num; 21 h1 = h1->next; 22 } 23 k = k % num; 24 if (k == num || k == 0) 25 return head; 26 else if(k < num) 27 return solute(num, head, k); 28 } 29 return head; 30 } 31 ListNode* solute(int num, ListNode* &head, int k) 32 { 33 ListNode *p = head, *h; 34 int num1 = num; 35 while (p->next != NULL) 36 { 37 if (num1 == k + 1) 38 h = p; 39 --num1; 40 p = p->next; 41 } 42 p->next = head; 43 head = h->next; 44 h->next = NULL; 45 return head; 46 } 47 };