# 【LeetCode】 61. Rotate List ## Description > Given a linked list, rotate the list to the right by k places, where k is non-negative. > 給一個linked list,請將它往右旋轉k次,k為一非負數。 ## Example: ``` 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 ``` ## Solution * 先做出往右一次,用for跑k次。 * 當list大小只有n的時候,轉n次就會回到原狀,所以可以將k%n加速。 * 如果list只有兩個元素的時候要做一些修正。 * 我感覺可以一次到位,這個作法應該是算偏慢,有時間再回來想。 ### Code ```C++=1 class Solution { public: ListNode* RightTurn(ListNode* head) { //only two if (head->next->next == NULL) { head->next->next = head; head = head->next; head->next->next = NULL; return head; } ListNode* last = head; while (last->next->next) last = last->next; last->next->next = head; head = last->next; last->next = NULL; return head; } ListNode* rotateRight(ListNode* head, int k) { int s = 0; for (ListNode*temp = head; temp; s++) temp = temp->next; if(s==0 || s==1) return head; k %= s; for (int i = 0; i < k; i++) head = RightTurn(head); return head; } }; ``` ###### tags: `LeetCode` `C++`