61. Rotate List
Problem
Tags: Linked List
, Two Pointers
Given the head
of a linked list, rotate the list to the right by k
places.
Example 1:
Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]
Example 2:
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 * 10^9
Code
C
// 61. Rotate List (4/29/54160)
// Runtime: 8 ms (21.70%) Memory: 6.09 MB (70.33%)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight (struct ListNode* head, int k) {
int len = 0;
struct ListNode* ptr = head;
if (head == NULL) {
return head;
}
while (true) {
len++;
if (ptr->next) {
ptr = ptr->next;
} else {
ptr->next = head;
ptr = head;
break;
}
}
int offset = len - ((k + 1) % len);
for (int i = 0; i < offset; i++) {
ptr = ptr->next;
if (i == offset - 1) {
struct ListNode* new = ptr->next;
ptr->next = NULL;
return new;
}
}
return head;
}