19.2.9 [LeetCode 61] Rotate List
阿新 • • 發佈:2019-02-09
none input == 鏈表 ace close ret urn exp
Given a linked list, rotate the list to the right by k places, where k is non-negative.
Example 1:
Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL
Example 2:
Input: 0->1->2->NULL, k = 4
Output: 2->0->1->NULL
Explanation:
rotate 1 steps to the right: 2->0->1->NULL
rotate 2 steps to the right: 1->2->0->NULL
rotate 3 steps to the right: 0->1->2->NULL
rotate 4 steps to the right: 2->0->1->NULL
題意
把鏈表循環右移k個
題解
1 class Solution { 2 public: 3 ListNode* rotateRight(ListNode* head, int k) { 4 if (head == NULL)return NULL; 5 ListNode*pre, *p = head; 6 int cnt = 0; 7 while (p != NULL) { 8 p = p->next; 9 cnt++;View Code10 } 11 k %= cnt; 12 if (k == 0)return head; 13 p = head; 14 while (k--) 15 p = p->next; 16 pre = head; 17 while (p->next != NULL) { 18 p = p->next; 19 pre = pre->next; 20 } 21 ListNode*ans = pre->next; 22 pre->next = NULL; 23 p->next = head; 24 return ans; 25 } 26 };
考慮空鏈和不移動的特殊情況
19.2.9 [LeetCode 61] Rotate List