1. 程式人生 > >19.2.9 [LeetCode 61] Rotate List

19.2.9 [LeetCode 61] Rotate List

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++;
10 } 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 };
View Code

考慮空鏈和不移動的特殊情況

19.2.9 [LeetCode 61] Rotate List