• LeetCode //C - 61. Rotate List


    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]

    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<=2109

    From: LeetCode
    Link: 61. Rotate List


    Solution:

    Ideas:
    1. Find the Length: First, traverse the list to find its length n.
    2. 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.
    3. Find New Head: Traverse the list to the (n−k mod n)th node. This will be the new tail after rotation.
    4. 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    Unity新的Input System
    QT课程 UI设计
    Windows8.1 安装VC++6.0 注意事项
    VoLTE基础自学系列 | 企业语音网简述
    1.1 redis介绍
    EclipseLink
    数据结构之图(关键路径)
    踩到一个关于分布式锁的非比寻常的BUG!
    前端拿到url地址拼接的参数
    vue~要懂的有关node与npm
  • 原文地址:https://blog.csdn.net/navicheung/article/details/132594806