牛客网:链表分割

news2024/11/28 10:57:00

一、题目

函数原型:

ListNode* partition(ListNode* pHead, int x)

二、思路

根据题意,可以设置两个新的链表,将原链表中所有小于x的结点链接到链表1中,大于x的结点链接到链表2中,最后再将两个链表合并即可。

此题有两种写法,一种是带哨兵位的链表,另一种是不带哨兵位的链表。

 实际操作过程中,发现对于两个链表的合并,带哨兵位链表比不带哨兵位链表的代码更加简洁。

(带哨兵位的结点进行尾插时不需要考虑头结点是否为空,且链表合并时可以直接合并,无需考虑某一链表是否为空的情况)

三、代码

代码实现1(带哨兵位)

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        ListNode *Bnewhead=(ListNode*)malloc(sizeof(ListNode));//小链表的哨兵位
        ListNode *Btail=Bnewhead;//大链表尾指针
        ListNode *Snewhead=(ListNode*)malloc(sizeof(ListNode));//大链表的哨兵位
        ListNode *Stail=Snewhead;//小链表尾指针

        ListNode *cur=pHead;//遍历指针
        while(cur)
        {
            if(cur->val<x)//结点值小于x,尾插到小链表
            {
                Stail->next=cur;
                Stail=cur;
            }
            else//结点大于x,尾插到大链表
            {
                Btail->next=cur;
                Btail=cur;
            }
            cur=cur->next;
        }

        Stail->next=NULL;//小链表尾结点指针域指向空
        Btail->next=NULL;//大链表尾结点指针域指向空

        Stail->next=Bnewhead->next;//将大小链表合并
        return Snewhead->next;//返回新链表的头结点(非哨兵位)
    }
};

代码实现2(不带哨兵位)

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        ListNode *cur=pHead;
        ListNode *Bnewhead=NULL;//大链表头结点
        ListNode *Btail=NULL;//大链表尾指针
        ListNode *Snewhead=NULL;//小链表头结点
        ListNode *Stail=NULL;//小链表尾指针

        while(cur)//遍历原链表
        {
            if(cur->val<x)//结点值小于x,尾插到小链表
            {
                if(Stail==NULL)//先判断小链表是否为空,为空则将插入结点作为头结点
                {
                    Snewhead=Stail=cur;
                }
                else//小链表不为空,进行尾插
                {
                    Stail->next=cur;
                    Stail=cur;
                }
            }
            else
            {
                if(Btail==NULL)//先判断大链表是否为空,为空则将插入结点作为头结点
                {
                    Bnewhead=Btail=cur;
                }
                else//大链表不为空,进行尾插
                {
                    Btail->next=cur;
                    Btail=cur;
                }
            }
            cur=cur->next;
        }
        if(Btail)//将大链表尾结点指针域指向空
            Btail->next=NULL;
        if(Stail)//将小链表尾结点指针域指向空
            Stail->next=NULL;
        
        //开始合并大小链表
        if(Stail==NULL)//如果小链表为空,则直接返回大链表
        {
            return Bnewhead;
        }
        else if(Btail==NULL)//如果大链表为空,则直接返回小链表
        {
            return Snewhead;
        }
        else if(Stail==NULL&&Btail==NULL)//如果大小链表都为空,则直接返回空
        {
            return NULL;
        }
        else//大小链表都不为空,将两个链表合并
        {
            Stail->next=Bnewhead;
            return Snewhead;
        } 
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1188005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HT4344 2通道 立体声 DAC转换器的特性

HT4344 2通道 立体声 DAC转换器的特性&#xff1a; 1.支持多种音频数字输入格式, 支持24-bit字节 2.可自动检测采样频率&#xff0c;Z高192kHz 3.105dB动态范围 4.-90dB THDN 5.集成多比特位的Δ-Σ调制器 6.支持3.3V/5V单电源供电 7.具有强抗时钟抖动能力 8.内部集成输…

ssm+vue的高校学生课堂考勤系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校学生课堂考勤系统设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转…

【违规处罚工作公示】10月30日-11月5日

10月30日至11月5日期间&#xff0c;共计对64,852个违规账号进行了封禁&#xff0c;其中57,954个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为&#xff0c;建议您优先在游戏内进行举报&#xff1b; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

感恩同行 | 这个火鸡节,我们一起好好过

社区收过 NebulaGraph 明信片的小伙伴&#xff0c;可能最常见到的词汇便是&#xff1a;谢谢。谢谢你的到来&#xff0c;让这个社区变得更有意思&#xff0c;更加多元。恰好&#xff0c;我们可人贴心的海外小姐姐 wenting 想给国际友人们来一个火鸡派对&#xff0c;一起过个感恩…

【小黑嵌入式系统第八课】初识PSoC Creator™开发——关于PSoC Creator下载、创建项目、单片机中的hello world(点亮一个led)

上一课&#xff1a; 【小黑嵌入式系统第七课】PSoC 5LP 开发套件&#xff08;CY8CKIT-050B &#xff09;——PSoC 5LP主芯片、I/O系统、GPIO控制LED流水灯的实现 文章目录 一、关于PSoC Creator1、PSoC Creator简介2、下载 二、创建项目三、led闪烁项目 一、关于PSoC Creator …

使用 AIGC ,ChatGPT 快速合并Excel工作薄

职场数据处理&#xff0c;数据分析汇报与统计的过程中&#xff0c;经常会遇到这样的一个问题那就是需要统计的数据源在多个文件中&#xff0c;多个工作薄中&#xff0c;如果要进行数据处理&#xff0c;汇总的时候会很不方便 例如&#xff1a; 如果要汇总6个月的数据可能就得需…

车企内部文件传输数据效率太慢?那是没找到合适的文件传输工具

在汽车行业&#xff0c;文件传输是一项不可或缺的工作。无论是内部协作还是上下游交互&#xff0c;都需要高效、安全、便捷的文件传输工具。然而&#xff0c;很多车企还在使用传统的文件传输方式&#xff0c;如邮件、U盘、FTP等&#xff0c;这些方式存在很多问题&#xff0c;比…

GPT-4 Turbo 发布 | 大模型训练的新时代:超算互联网的调度与调优

★OpenAI&#xff1b;ChatGPT;Sam Altman&#xff1b;Assistance API&#xff1b;GPT4 Turbo&#xff1b;DALL-E 3&#xff1b;多模态交互&#xff1b;算力调度&#xff1b;算力调优&#xff1b;大模型训练&#xff1b;GH200&#xff1b;snowflake&#xff1b;AGI&#xff1b;A…

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容

一百二十三、计算机相关理论 123.1 计算机的组成 目前的计算机都还是 冯诺依曼体系 &#xff0c;也就是由&#xff1a;输入、输出、运算器、存储器、控制器&#xff0c;这个五个部分构成。输入&#xff1a;Input&#xff0c;常见的输入设备&#xff0c;比如鼠标&#xff0c;键…

【halcon】select_shape 值高宽比例选择

今天&#xff0c;发现一个小技巧分享给小伙伴们。 select_shape&#xff0c;这算子用的非常的多&#xff0c;平时我主要用来选择面积&#xff0c;位置&#xff0c;长宽等等。 今天&#xff0c;我在筛选瑕疵的时候&#xff0c;有很多细长的区域&#xff0c;不是我想要的&#…

新一日分享

本人对单片机领域感兴趣&#xff0c;已经写了34篇CSDN原创文章&#xff0c;有兴趣可以互关噢!

vxe-table表格校验失败后保持可以编辑状态

vxe-table表格校验失败后保持可以编辑状态 鼠标移出后可编辑状态消失 在edit-config设置为 autoClear: false 鼠标移出继续保持可编辑状态 <vxe-grid :edit-config"{trigger: dblclick, mode: row, showStatus: true, autoClear: false}" :edit-rules"valid…

关于AM5-DB低压备自投装置如何应用在某变电站项目的-安科瑞 蒋静

摘 要&#xff1a;随着电力需求的不断增加&#xff0c;电力系统供电可靠性要求越来越高&#xff0c;许多供电系统已具备两回或多回供电线路。备用电源自动投入装置可以有效提高供电的可靠性&#xff0c;该类装置能够在工作电源因故障断开后&#xff0c;自动且迅速地将备用电源投…

人工智能是个什么样的专业?

人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门致力于研究、开发和应用能够模拟、延伸和扩展人的智能的理论、方法、技术和应用系统的学科与技术领域。随着人工智能技术在各行各业的广泛应用&#xff0c;人工智能专业也逐渐成为备受青睐的热…

基于表面电势的AlGaN/GaN MODFET紧凑模型

标题&#xff1a;A Surface-Potential-Based Compact Model for AlGaN/GaN MODFETs 来源&#xff1a;IEEE TRANSACTIONS ON ELECTRON DEVICES&#xff08;11年&#xff09; 摘要 - 本文首次构建了基于表面势&#xff08;SP&#xff09;的AlGaN/GaN调制掺杂场效应晶体管&#…

快速排序【2023年最新】

快速排序思想总结&#xff1a; 内附快排模版&#xff0c;可开袋即食。 学了一套快速排序的模版&#xff0c;接下来我说一下我的理解。 这套模板的思路是这样的&#xff0c;随机找到一个点&#xff0c;可以是数组中的左边界也可以是右边界&#xff0c;或者是数组中任何一个元…

创建Bucket失败,请核对Bucket名称(规则:只能包含小写字母、数字和短横线,必须以小写字母或者数字开头 长度必须在3-255字节之间

这个是管理云服务器的职员的事&#xff0c;和前端没关系&#xff0c; 报错这个的话&#xff0c;一般是上传图片的时候oss那的问题&#xff0c; 接口上传调用成功&#xff0c;但是图片没上传到云服务器上&#xff0c; 小程序和后台如果都用到这个前台和后台都会报错&#xff0c;…

【STM32】HAL库UART含校验位的串口通信配置BUG避坑

【STM32】HAL库UART含校验位的串口通信配置BUG避坑 文章目录 UART协议校验位HAL库配置含校验位的串口配置BUG避坑附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总线函…

对话凯文·凯利:AI 会取代人的 90% 技能,并放大剩余的 10%

采访 | 邹欣&#xff0c;CSDN 副总裁 作者 | 王启隆 责编 | 唐小引 出品 | 《新程序员》编辑部 5000 天后&#xff0c;你都会做些什么&#xff1f; 是和 AI 助手一起编程&#xff0c;还是让生活完全由 AI 掌控&#xff0c;自己坐享其成&#xff1f;如果到时候还要上班&a…