• LeetCode //C - 86. Partition List


    86. Partition List

    Given the head of a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

    You should preserve the original relative order of the nodes in each of the two partitions.
     

    Example 1:

    在这里插入图片描述

    Input: head = [1,4,3,2,5,2], x = 3
    Output: [1,2,2,4,3,5]

    Example 2:

    Input: head = [2,1], x = 2
    Output: [1,2]

    Constraints:
    • The number of nodes in the list is in the range [0, 200].
    • -100 <= Node.val <= 100
    • -200 <= x <= 200

    From: LeetCode
    Link: 86. Partition List


    Solution:

    Ideas:

    The main idea behind the code is to maintain two separate linked lists:

    1. Smaller List: This list contains all the nodes with values smaller than x.
    2. Greater or Equal List: This list contains all the nodes with values greater than or equal to x.

    The code does the following:

    Initialization

    1. We initialize two “dummy” nodes (smallerHead and greaterHead) to serve as the starting points for the two new lists. Dummy nodes simplify the code by eliminating special cases for the head nodes of the lists.

    Traversal

    1. We then traverse the original list (head). For each node:
    • If its value is smaller than x, we add it to the end of the “Smaller List” and move the smaller pointer ahead.
    • Otherwise, we add it to the end of the “Greater or Equal List” and move the greater pointer ahead.

    Concatenation

    1. Once we’ve gone through all the nodes, we concatenate the “Smaller List” and the “Greater or Equal List” by setting the next of the last node in the “Smaller List” to the first node in the “Greater or Equal List”.

    Cleanup

    1. Finally, we return the node following the smallerHead dummy node as the new head of the combined list. We also free the memory allocated for the dummy nodes.
    Code:
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    struct ListNode* partition(struct ListNode* head, int x) {
        // Initialize two new dummy nodes to serve as the starting points for the two new lists.
        struct ListNode *smallerHead = (struct ListNode *)malloc(sizeof(struct ListNode));
        struct ListNode *greaterHead = (struct ListNode *)malloc(sizeof(struct ListNode));
        smallerHead->val = 0;
        greaterHead->val = 0;
        smallerHead->next = NULL;
        greaterHead->next = NULL;
        
        struct ListNode *smaller = smallerHead;
        struct ListNode *greater = greaterHead;
        
        // Traverse the original list
        while (head != NULL) {
            if (head->val < x) {
                smaller->next = head;
                smaller = smaller->next;
            } else {
                greater->next = head;
                greater = greater->next;
            }
            head = head->next;
        }
        
        // Connect the two lists
        smaller->next = greaterHead->next;
        greater->next = NULL;
        
        // The new head of the list is the node following the smaller dummy node.
        struct ListNode *newHead = smallerHead->next;
        
        // Free the dummy nodes
        free(smallerHead);
        free(greaterHead);
        
        return newHead;
    }
    
    • 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
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    segmentation
    c++11产生指定范围内均匀分布随机数、产生大量不重复随机数
    Sentinel实战(待完善)
    如何选币与确定对应策略研究
    SSM整合
    Java基础——Java语言与面向对象
    如何做到,小程序上线1个月总用户量提高70%
    HStreamDB v0.9 发布:分区模型扩展,支持与外部系统集成
    世界杯小组赛频繁爆冷?这或许是强队的谋略 一分钟带你了解2022卡塔尔世界杯赛制
    【数据结构-树&图】树和图的性质
  • 原文地址:https://blog.csdn.net/navicheung/article/details/132631686