当前位置: 首页 > web >正文

【算法--链表】86.分割链表--通俗讲解

一、题目是啥?一句话说清

给你一个链表和一个值 x,把链表分成两部分:所有小于 x 的节点都放在大于或等于 x 的节点之前,并且保持节点原来的相对顺序。

示例:

  • 输入:head = [1,4,3,2,5,2], x = 3
  • 输出:[1,2,2,4,3,5](所有小于3的节点1、2、2都在大于等于3的节点4、3、5之前,且相对顺序不变)

二、解题核心

使用两个临时链表:一个收集所有小于 x 的节点,另一个收集所有大于或等于 x 的节点。遍历原链表,将每个节点分配到对应的临时链表中,最后将两个临时链表连接起来。 这就像把一堆水果分成两筐:一筐放所有苹果,另一筐放所有橙子,然后把苹果筐放在橙子筐前面。

三、关键在哪里?(3个核心点)

想理解并解决这道题,必须抓住以下三个关键点:

1. 两个临时链表的使用

  • 是什么:创建两个临时链表,分别存储小于 x 的节点和大于等于 x 的节点。
  • 为什么重要:这样可以保持节点的相对顺序,因为节点被按顺序添加到对应的链表中。

2. 哑节点(Dummy Node)的运用

  • 是什么:为每个临时链表创建一个哑节点作为头节点,简化链表操作。
  • 为什么重要:哑节点可以避免处理空链表的边界情况,让代码更简洁。

3. 正确连接链表

  • 是什么:遍历完成后,将小于 x 的链表的末尾指向大于等于 x 的链表的头节点,并将大于等于 x 的链表的末尾指向 null。
  • 为什么重要:如果连接不正确,可能会导致链表断开或形成环。

四、看图理解流程(通俗理解版本)

让我们用链表 1 → 4 → 3 → 2 → 5 → 2 和 x=3 的例子来可视化过程:

  1. 初始化

    • 创建两个哑节点:leftDummy 和 rightDummy。
    • 初始化两个指针 left 和 right,分别指向 leftDummy 和 rightDummy。
    • 初始状态:leftDummy → null, rightDummy → null
  2. 遍历原链表

    • 节点1:值1 < 3,添加到 left 链表:leftDummy → 1
    • 节点4:值4 ≥ 3,添加到 right 链表:rightDummy → 4
    • 节点3:值3 ≥ 3,添加到 right 链表:rightDummy → 4 → 3
    • 节点2:值2 < 3,添加到 left 链表:leftDummy → 1 → 2
    • 节点5:值5 ≥ 3,添加到 right 链表:rightDummy → 4 → 3 → 5
    • 节点2:值2 < 3,添加到 left 链表:leftDummy → 1 → 2 → 2
  3. 连接链表

    • 将 left 链表的末尾(最后一个2)指向 right 链表的头节点(4)。
    • 将 right 链表的末尾(5)指向 null。
    • 最终链表:leftDummy → 1 → 2 → 2 → 4 → 3 → 5
  4. 返回结果:返回 leftDummy.next,即节点1。

五、C++ 代码实现(附详细注释)

#include <iostream>
using namespace std;// 链表节点定义
struct ListNode {int val
http://www.xdnf.cn/news/20402.html

相关文章:

  • Linux基础知识(二)
  • Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统
  • Gutenberg块编辑器:WordPress 2025高效内容开发指南
  • 小智AI编译
  • Hadoop(八)
  • 02-Media-6-rtsp_server.py 使用RTSP服务器流式传输H264和H265编码视频和音频的示例程序
  • 校园管理系统|基于SpringBoot和Vue的校园管理系统(源码+数据库+文档)
  • Java中的包
  • 文心快码已支持Kimi-K2-0905模型
  • 每日一练001.pm
  • 打工人日报#20250905
  • 分享个C++线程池的实现源码
  • 【开题答辩全过程】以 基于Springboot电脑维修平台整合系统的设计与实现为例,包含答辩的问题和答案
  • daily notes[10]
  • 各种背包问题简述
  • Interior AI-AI驱动的室内设计工具
  • 变频器【简易PLC】功能中的时间问题
  • 神马 M63S+ 438T矿机评测:SHA-256算法高效能挖矿利器
  • 无名信号量
  • 探索Xilinx GTH收发器掉电与回环功能
  • Coze源码分析-资源库-删除提示词-前端源码
  • Nacos 启动
  • 【完整源码+数据集+部署教程】乡村道路植物与障碍物识别图像分割系统源码和数据集:改进yolo11-OREPA
  • 当前的大部分的AI,可能已经分到了传统那桌了!Causal AI:颠覆传统机器学习的下一代人工智能技术,让AI真正理解“为什么“!
  • python + flask 3 简单的授权验证(基于文件)
  • 小场景大市场:猫狗识别算法在宠物智能设备中的应用
  • 如何解决 OutOfMemoryError 内存溢出 —— 原因、定位与解决方案
  • 1 分布式事务在 Java Web 项目中的实践
  • 分库分表方案中出现数据倾斜问题怎么解决
  • MySQL知识回顾总结----数据类型