Given the head of a linked list, rotate the list to the right by k places.
Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]
Input: head = [0,1,2], k = 4
Output: [2,0,1]
Constraints:
The number of nodes in the list is in the range [0, 500].
-100 <= Node.val <= 100
0 <= k <= 2 * 109
Solutions
🧠 Cpp
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */classSolution{public: //O(n)solution with circular listListNode*rotateRight(ListNode* head,int k) {if(!head)return head; //find list length and save tailsize_t length =0; ListNode *tail =nullptr;for(ListNode *counter = head; counter; ++length, counter =counter->next)if(!counter->next) tail = counter; //make list circulartail->next = head; //module k k = k % length; //we will move k last element to front //length - k element will be a new tail //length - k + 1 element will be a new head //find new tail: tail = head;for(int i =0; i < length - k -1; ++i, tail =tail->next); head =tail->next;tail->next =nullptr;return head; }};