61. Rotate List
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]文章来源:https://www.toymoban.com/news/detail-691991.html
Constraints:
- The number of nodes in the list is in the range [0, 500].
- -100 <= Node.val <= 100
- 0 < = k < = 2 ∗ 1 0 9 0 <= k <= 2 * 10^9 0<=k<=2∗109
From: LeetCode
Link: 61. Rotate List
文章来源地址https://www.toymoban.com/news/detail-691991.html
Solution:
Ideas:
- Find the Length: First, traverse the list to find its length n.
- Calculate Effective Rotation: Since rotating a list of length n places is the same as not rotating it at all, we only need to rotate k mod n places.
- Find New Head: Traverse the list to the (n−k mod n)th node. This will be the new tail after rotation.
- Perform Rotation: Update the next pointer of the new tail to NULL and set the next pointer of the old tail to the old head.
Code:
struct ListNode* rotateRight(struct ListNode* head, int k) {
if (head == NULL || k == 0) {
return head;
}
// Step 1: Find the length of the list
int n = 1;
struct ListNode *tail = head;
while (tail->next != NULL) {
n++;
tail = tail->next;
}
// Step 2: Calculate the effective number of rotations needed
k = k % n;
if (k == 0) {
return head;
}
// Step 3: Find the new head and tail
struct ListNode *new_tail = head;
for (int i = 0; i < n - k - 1; i++) {
new_tail = new_tail->next;
}
struct ListNode *new_head = new_tail->next;
// Step 4: Perform the rotation
new_tail->next = NULL;
tail->next = head;
return new_head;
}
到了这里,关于LeetCode //C - 61. Rotate List的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!