【LeetCode力扣】86. 分隔链表

news/2024/12/21 23:06:42/

 

目录

1、题目介绍

2、解题思路

2.1、双链表双指针

2.2、代码描述


 

1、题目介绍

原题链接:86. 分隔链表 - 力扣(LeetCode)

 示例 1:

输入:head = [1,4,3,2,5,2], x = 3

输出:[1,2,2,4,3,5]

 示例 2:

输入:head = [2,1], x = 2

输出:[1,2]

 提示:

  • 链表中节点的数目在范围 [0, 200] 内
  • -100 <= Node.val <= 100
  • -200 <= x <= 200

2、解题思路

根据题意,考虑通过「新建两个链表」实现原链表分割,算法流程为:

  1. 新建两个链表 small  BigEqu ,分别用于链接小于标志数 x 的结点和大于等于标志数 x 的结点。
  2. 遍历链表head并依次比较各节点值 head->val x 的大小,若head->val < x ,则将head指向的该结点添加到链表 small 最后面。若head->val >= x,则将head指向的该结点添加到链表BigEqu最后面。
  3. 遍历完成后,拼接 small  BigEqu 链表。
  4. 最终判断头结点并返回。

2.1、双链表双指针

首先比较head->val与x,发现此时head->val小于x,因此放入small链表中,此时small的链头smallH和链尾smallT都指向结点1。head指向下一个结点。

继续比较head->val与x,发现此时head->val大于x,因此放入BigEqu链表中,此时BigEqu的链头BigEquH和链尾BigEquT都指向结点4。head指向下一个结点。

继续比较head->val与x,发现此时head->val等于x,因此放入BigEqu链表中,此时BigEqu的链尾BigEquT指向结点3。head指向下一个结点。

继续比较head->val与x,发现此时head->va小于x,因此放入small链表中,此时small的链尾smallT指向结点2。head指向下一个结点。

继续比较head->val与x,发现此时head->va大于x,因此放入BigEqu链表中,此时BigEqu的链尾BigEquT指向结点5。head指向下一个结点。

继续比较head->val与x,发现此时head->va小于x,因此放入small链表中,此时small的链尾smallT指向结点2。head指向下一个结点,此时head为null,则停止循环。

此时以smallH为链头的链表就是小于标志数 x 的结点集,以BigEqu为链头的链表就是大于等于标志数 x 的结点集,只需要将small链表的链尾smallT的next指向BigEqu链表的链头,最后返回small的 链头smallT 即可。

2.2、代码描述

循环的过程都比较好理解,就是最后合并链表时需要考虑特殊情况,如果没有小于标志数的结点时,此时返回的链头就不是smallH了,而是BigEqu的链头BigEquH

struct ListNode* partition(struct ListNode* head, int x){struct ListNode* smallH = NULL; //小于头struct ListNode* smallT = NULL; //小于尾struct ListNode* BigEquH = NULL; //大于等于头struct ListNode* BigEquT = NULL; //大于等于尾struct ListNode* next = NULL;//小于连一起,大于等于连一起while(head){next = head->next;  //用next保存head的next,然后将head->置为空head->next = NULL; //确保此时的head的next置为空,不然可能会导致死循环报错if(head->val < x)  //小于标志数{if(smallH == NULL)   //等于NULL表示第一次放入结点,//此时链头链尾都指向同一个结点{smallH = smallT = head;  }else    //small的链尾的next指向head{smallT->next = head;smallT = head;}}else  //大于等于标志数{if(BigEquH == NULL)  //同理{BigEquH = BigEquT = head;}else{BigEquT->next = head;BigEquT = head;}}head = next;   //head指向下一个结点}//判断是否可以尾接头if(smallT != NULL)  //当small链尾不为空,即small链表有结点时,//才让small链尾连接BigEqu链头{smallT->next = BigEquH;}return smallH == NULL ? BigEquH : smallH;  //当small链表没有结点时,返回链头BigEquH,//否则返回链头smallH
}

更多【LeetCode刷题】 推荐:

【LeetCode力扣】LCR170 使用归并排序的思想解决逆序对问题(详细图解)_Hacynn的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/133578735【LeetCode力扣】75 快速排序的子过程partition(荷兰国旗问题)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/133785886【LeetCode力扣】297. 二叉树的序列化与反序列化-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/133827375

 

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!


http://www.ppmy.cn/news/1170258.html

相关文章

将用友U8的数据可视化需要哪些工具?

将金蝶U8的数据可视化需要一个奥威BI数据可视化工具&#xff0c;以及一套专为用友U8打造的标准化BI数据分析方案。 奥威BI SaaS平台&#xff1a;一键链接用友U8&#xff0c;立得报表 别的BI软件围绕用友U8的数据做可视化&#xff1a;1、准备配置环境&#xff1b;2、下载安装配…

2023年陕西省安全员B证证考试题库及陕西省安全员B证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年陕西省安全员B证证考试题库及陕西省安全员B证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

MSQL系列(六) Mysql实战-SQL语句优化

Mysql实战-SQL语句优化 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;以及索引最左侧匹配原则&#xff0c;Explain的用法&#xff0c;可以看到是否使用了索引&#xff0c;今天我们讲解一下SQL语句的优化及如何优化 文章目录 Mysql实战-SQL语句优化1.…

spring.profiles生效顺序

服务在不同环境启动&#xff0c;需要的运行参数可能会有差异&#xff0c;不同启动环境也可能公用同一份运行参&#xff0c;为了方便对这些不同环境相同和差异参数进行管理&#xff0c;springboot提供了文件配置化形式对这些参数进行管理&#xff0c;对于不同环境的差异化参数使…

从手动操作到自动化管理,如何实现企业身份业务全面自动化?

在数字化时代&#xff0c;身份管理已经成为了企业和组织不可或缺的一部分&#xff0c;企业对于管理员工、客户和合作伙伴的身份信息和访问权限的需求变得愈发复杂。身份管理不仅仅是一项必要的任务&#xff0c;更是确保业务流畅运营和数据安全的关键因素。然而&#xff0c;传统…

JUC并发编程笔记2

省流&#xff1a; 自己笔记&#xff0c;划走~~~~ 缓存更新策略

磁盘清理 | 已经卸载的软件还出现在应用和功能里怎么办?

一句话总结解决方法&#xff1a; 安装Geek Uninstaller,删除卸载残留。 问题描述&#xff1a; 最近磁盘满了&#xff0c;需要删除一些平时不常用的软件&#xff0c;但是发现一个问题。就是已经删除的软件&#xff0c;仍然会出现在“应用与功能”中。并且显示卸载图标为灰色&am…

【UE5】引入C++插件Plugins不在UE里出现

原因 未编译过C 原项目为蓝图项目&#xff0c;或者虽然为C项目&#xff0c;但并为编译过C. 解决 创建一个C脚本&#xff0c;让编辑器重启重新编译一遍。 如还不行&#xff0c;则打开Plugins插件面板&#xff0c;创建一个空的新的插件&#xff0c;再让引擎自动重启重新编译…