• LeetCode每日一练 —— CM11 链表分割


    🌟 前言

    Wassup guys!我是Edison 😎

    今天是 牛客 上的 nowcoder CM11 链表分割

    Let’s get it!

    在这里插入图片描述



    1. 题目分析

    现有一链表的头指针 ListNode* pHead,给一定值 x
     
    编写一段代码将所有小于 x 的结点排在其余结点之前,且不能改变原来的数据顺序;
     
    返回重新排列后的链表的头指针。

    示例一

    输入:[3,5,1,6,3,4],x = 4
     
    输出:[3,1,3,5,6,4]。
     
    注意:x 等于 4,那么比 x 小的就是:313,所以这三个数要排在前面,顺序不能变;
     
    那么比 x 大的就是:56,所以这两个数要排在 3,1,3 的后面,顺序不能变;
     
    再把 x 放在最后

    2. 题目图解

    这道题的解题思路为:

    (1)遍历原链表;
     
    (2)把 小于 x 的插入到一个新的链表 1
     
    (3)把 大于等于 x 的插入到一个新的链表 2
     
    (4)然后把 链表 1链表 2 链接起来;

    定义 cur 指向原链表的头节点,用来遍历原链表;

    定义 链表 1lessHeadlessTail 都指向 哨兵位 的节点(不为 NULL);

    定义 链表 2greaterHeadgreaterTail 都指向 哨兵位 的节点(不为 NULL);
    在这里插入图片描述

    动图一👇
    在这里插入图片描述

    动图二👇
    在这里插入图片描述

    动图三👇
    在这里插入图片描述

    链表 1链表 2 链接起来
    在这里插入图片描述
    注意:

    题目是没有说链表是带 哨兵位 的,所以我们需要先让 lessHeadgreaterHead 指向 哨兵位下一个节点
     
    然后再用 链表 1lessTail 去链接 链表 2greaterHead

    3. 代码实现

    接口代码

    class Partition {
    public:
        ListNode* partition(ListNode* pHead, int x) {
            struct ListNode* lessHead, *lessTail, *greaterHead, *greaterTail;
            lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode));
            greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode));
            
            lessTail->next = greaterTail->next = NULL;
            
            struct ListNode* cur = pHead;
            
            while (cur) {
                if (cur->val < x) {
                    lessTail->next = cur;
                    lessTail = lessTail->next;
                }
                else {
                    greaterTail->next = cur;
                    greaterTail = greaterTail->next;
                }
                cur = cur->next;
            }
            
            lessTail->next = greaterHead->next;
            greaterTail->next = NULL;
            
            struct ListNode* list = lessHead->next;
            free(lessHead);
            free(greaterHead);
            
            return list;
        }
    };
    
    • 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

    提交结果
    在这里插入图片描述

  • 相关阅读:
    linux系统中安装redis到指定目录
    vue3在main.js里面定义全局函数,然后其他页面使用
    Vue3理解(7)
    C++-map和set
    TLS及反调试机制
    浅尝:iOS的CoreGraphics和Flutter的Canvas
    Spring源码解析(十一):spring事务配置类源码
    2022 AI指数报告出炉:中国专利申请量居全球榜首
    qsort () 库函数
    最新前端vue项目打包放到gitHub上部署步骤
  • 原文地址:https://blog.csdn.net/m0_63325890/article/details/125986788