Leetcode——面试题02.04.分割链表

news2025/1/11 7:48:01

面试题 02.04. 分割链表 - 力扣(LeetCode) 

对于该链表OJ,我们两种大的方向:

1.在原链表上修改;2.创建新链表,遍历原链表。

在原链上进行修改:如果该节点的val小于x则继续往后走,如果大于等于x则将该节点尾插到该链表,然后删除该节点,继续遍历;

创建新链表,遍历原链表:对于这种方式也有两种

  • 创建一个新链表,遍历原链表,如果节点的val小于x则头插到新链表中,如果大于等于x则尾插到新链表中。
  • 创建两个新链表:little和big。遍历原链表,如果节点的val值小于x则尾插到little链表中,如果节点的val值大于等于x则尾插到big链表中,遍历完后,连接这两个新链表即可。

我们今天来实现创建两个新链表的方式来解决问题。

我们在创建链表的时候可以采取带头链表的方式,这样可以避免重复代码的出现。 

新链表前的红色圆点就代表着头节点也叫做哨兵位。 我们创建完链表并遍历完之后,就得到了两个大小链表,我们只需要将这两个连接起来就可以了。

我们通过上面代码连接好之后 ,就得到了如图的链表,那么是否可以直接返回little->next?

答案是不行!!! 在该链表中出现了循环结构,程序会陷入死循环。那么怎么解决这个问题呢?

该问题出现的原因是因为big链表的尾节点的next指针指向的不是NULL造成的。我们只需要在连接之前将big链表的尾节点的next指针指向NULL就行了。

 下面附上完整代码(注:该代码是leetcode的解题代码,不包括main函数)

typedef struct ListNode ListNode;
struct ListNode* partition(struct ListNode* head, int x)
{
    //已知链表为空,直接返回NULL
    if(head == NULL)
    {
        return NULL;
    }
    //已知链表不为空
    //创建两个新链表,为了避免重复代码,可以利用哨兵位
    ListNode* little = (ListNode*)malloc(sizeof(ListNode));
    ListNode* littletail = little;
    ListNode* big = (ListNode*)malloc(sizeof(ListNode));
    ListNode* bigtail = big;
    //遍历原链表
    while(head)
    {
        if(head->val<x)
        {
            //小于x,将节点尾插little中
            littletail->next = head;
            littletail = littletail->next;
        }
        else
        {
            //大于等于x,将该节点尾插到big中
            bigtail->next = head;
            bigtail = bigtail->next;
        }
        //遍历下一个节点
        head = head->next;
    }
    //退出循环说明已经遍历完了原链表
    //修改bigtail指向,否则会陷入死循环
    bigtail->next = NULL;

    //连接大小链表
    //因为这两个链表都是带头链表,所以连接时要指向头结点的下一个节点
    littletail->next = big->next;
    
    return little->next;
}

完!

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

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

相关文章

全新桥隧坡安全监测解决方案,24h监测效率提升30%

4月26日&#xff0c;交通运输部党组书记、部长李小鹏在部务会上强调&#xff0c;要高度重视公路桥梁隧道结构监测工作&#xff0c;抓紧推进公路桥梁隧道结构监测系统建设&#xff0c;进一步健全完善公路桥梁隧道结构监测长效运行机制。 中海达积极参与公路桥梁隧道结构监测工作…

WebLlama:通过对话进行网页浏览的智能代理

WebLlama&#xff1a;智能网页浏览代理 WebLlama 是 McGill University 自然语言处理团队的研究项目&#xff0c;旨在开发能通过对话浏览网页的智能代理。这些代理基于 Llama-3 模型优化微调&#xff0c;基于 Llama-3-8B-Instruct 模型&#xff0c;专为网页导航和对话任务优化…

对话访谈——五问RAG与搜索引擎:探索知识检索的未来

记一次关于RAG和搜索引擎在知识检索方面的对话访谈&#xff0c;针对 RAG 与传统搜索引擎的异同,以及它们在知识检索领域的优劣势进行了深入的探讨。 Q&#xff1a;传统搜索引擎吗&#xff0c;通过召回-排序的两阶段模式&#xff0c;实现搜索逻辑的实现&#xff0c;当前RAG技术也…

深入浅出DBus-C++:Linux下的高效IPC通信

目录标题 1. DBus简介2. DBus-C的优势3. 安装DBus-C4. 使用DBus-C初始化和连接到DBus定义接口和方法发送和接收信号 5. dbus-cpp 0.9.0 的安装6. 创建一个 DBus 服务7. 客户端的实现8. 编译和运行你的应用9. 瑞芯微&#xff08;Rockchip&#xff09;的 Linux 系统通常会自带 db…

【网络原理】网络层IP协议 | IP报文格式 | IP地址 | 地址管理 | 路由选择

文章目录 网络层一、IP协议1.IP协议报文格式2.地址管理IP地址不够用的解决方法&#xff1a;1.动态分配IP&#xff1a;过渡方案&#xff0c;目前仍广泛存在。2.NAT机制&#xff08;网络地址转换&#xff09;1.内网IP(局域网IP)2.外网IP(广域网IP) 3.IPv64.网段划分5.子网掩码6.特…

基于SSM的文物管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的文物管理系统拥有俩种角色 管理员&#xff1a;个人信息管理、用户管理、分类管理、文物信息管理、文物外借管理、文物维修管理、留言板管理等 用户&#xff1a;登录注册、分类…

ECharts在网页中添加可视化图标-在网页中添加交互图表+option模块案列详解

一、引言 ECharts 是一个使用 JavaScript 编写的开源可视化库&#xff0c;它可以在浏览器中生成交互式的图表。无论是折线图、柱状图、散点图还是饼图&#xff0c;ECharts 都能轻松应对。本文将带领大家了解如何在网页中添加 ECharts 可视化图标。 本章可以直接跳到第五点完整…

alphassl ocsp通配符证书

AlphaSSL是GlobalSign旗下的一个子品牌&#xff0c;GlobalSign是知名度较高的正规SSL证书颁发机构&#xff0c;应用范围广泛&#xff0c;比如电子商务、在线支付、网上银行等网站&#xff0c;还可以兼容几乎99%的主流浏览器。AlphaSSL旗下的DV基础型通配符SSL证书&#xff0c;不…

Github查找代码项目高级语法(含科研项目查找案例)

基础搜索语法 1.搜索名字 in:name XXX 2.搜索描述 in:description XXX 3.搜索readme in:readme XXX 4.根据stars stars:>2000 5.根据fork fork:>3000 6.仓库大小搜索 size:>5000 [注意: 该处单位大小为 k] 7.根据更新时间 …

聚醚醚酮(Polyether Ether Ketone)PEEK在粘接使用时可以使用UV胶水吗?要注意哪些事项?

一般情况下&#xff0c;聚醚醚酮&#xff08;Polyether Ether Ketone&#xff0c;PEEK&#xff09;是一种难以黏附的高性能工程塑料&#xff0c;而UV胶水通常不是与PEEK进行粘接的首选方法。PEEK表面的化学性质和高温性能使得它对常规胶水的附着性较低。然而&#xff0c;有一些…

ChatGPT 网络安全秘籍(四)

原文&#xff1a;zh.annas-archive.org/md5/6b2705e0d6d24d8c113752f67b42d7d8 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第八章&#xff1a;事故响应 事故响应是任何网络安全策略的关键组成部分&#xff0c;涉及确定、分析和缓解安全漏洞或攻击。 及时和有效地…

人形机器人狂潮来袭

奔跑、咖啡拉花、搬箱子、叠衣、分拣物品、吸尘清洁……曾存在于科幻电影中的人形机器人&#xff0c;正加速走进人类社会。 去年以来&#xff0c;伴随着AI大模型浪潮&#xff0c;被视为AI最佳载体的人形机器人似乎驶入了一条快车道&#xff0c;科技巨头纷纷入局&#xff0c;产…

音视频入门基础:像素格式专题(1)——RGB简介

一、像素格式简介 像素格式&#xff08;pixel format&#xff09;指像素色彩按分量的大小和排列。这种格式以每个像素所使用的总位数以及用于存储像素色彩的红、绿、蓝和 alpha 分量的位数指定。在音视频领域&#xff0c;常用的像素格式包括RGB格式和YUV格式&#xff0c;本文…

虚拟电表测试程序645MeterV2.7.1如何支持超过四个com口

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 这个虚拟电表测试程序是网上找…

【Excel】excel计算相关性系数R、纳什效率系数NSE、Kling-Gupta系数KGE

对于采用的数据&#xff1a; B2:B10958是观测值的所在范围 C2:C10958是模型计算值的所在范围 一、相关系数R是用来衡量两个变量之间线性关系强度和方向的统计量。在水文学和气象学中&#xff0c;常用的相关系数是皮尔逊相关系数&#xff08;Pearson correlation coefficient&am…

Flutter笔记:Widgets Easier组件库(1)使用各式边框

Flutter笔记 Widgets Easier组件库&#xff08;1&#xff09;&#xff1a;使用边框 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…

IoTDB 入门教程①——时序数据库为什么选IoTDB ?

文章目录 一、前文二、性能排行第一三、完全开源四、数据文件TsFile五、乱序数据高写入六、其他七、参考 一、前文 IoTDB入门教程——导读 关注博主的同学都知道&#xff0c;博主在物联网领域深耕多年。 时序数据库&#xff0c;博主已经用过很多&#xff0c;从最早的InfluxDB&a…

2024年北京市中小学生信息学能力测评活动BCSP-X小学低年级组初赛测试题(模拟题解析)

一、单项选择&#xff08;共 15 题&#xff0c;每题 2 分&#xff0c;共计 30 分&#xff0c;每题有且仅有一个正确选项&#xff09; 以下是题目和解析的完整格式: 不可以作为c中的变量名的是&#xff08; &#xff09;。 A. I以下loveChinaB. I_loveChinaC. I_love_ChinaD. i_…

SpringBoot+阿里云实现验证码登录注册及重置密码

开通阿里云短信服务 阿里云官网 创建API的Key 可以使用手机号或者刷脸来进行创建Key 创建成功 开通完成以后接下来实现代码请求阶段 配置maven依赖 <!-- 阿里云 oss 短信 依赖--><dependency><groupId>com.aliyun</groupId><artifactId>dysm…

Electron+Vue3+Vite+ElectronForge整合 - 一键启动两个服务 一键打包两个服务

说明 本文介绍一下 Electron Vue3 Vite Electron Forge 的高级整合操作。vue3 : 使用 TS 的语法开发&#xff1b; Electron : 使用 JS 的语法开发。本文将从项目初始化开始&#xff0c;一步一步的完成项目的启动、打包全流程的介绍。实现的效果是 &#xff1a; 1、一个正常…