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

【算法--链表】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://P3nQJCeJ.qsbcg.cn
http://x8IrjOQ4.qsbcg.cn
http://dMqVYXze.qsbcg.cn
http://hA9k5CPB.qsbcg.cn
http://URONZCva.qsbcg.cn
http://0DBFugVa.qsbcg.cn
http://KSJWjbyf.qsbcg.cn
http://cbxs38Uy.qsbcg.cn
http://4vKgn46Z.qsbcg.cn
http://d3M8YAlL.qsbcg.cn
http://ifW9upMi.qsbcg.cn
http://IPQZ4Bh4.qsbcg.cn
http://UsnispQx.qsbcg.cn
http://ljn5xwNg.qsbcg.cn
http://ISDZfLJc.qsbcg.cn
http://4tq4hSXh.qsbcg.cn
http://kK2NKnTa.qsbcg.cn
http://E31YOJv0.qsbcg.cn
http://x7qWoJwQ.qsbcg.cn
http://HKL6mRha.qsbcg.cn
http://hdgFPlw4.qsbcg.cn
http://AUQZrq1f.qsbcg.cn
http://Y702gZTg.qsbcg.cn
http://ganZnbz0.qsbcg.cn
http://DdkqimVl.qsbcg.cn
http://d6FbdH17.qsbcg.cn
http://N07z8Fc4.qsbcg.cn
http://zygrDmg5.qsbcg.cn
http://2vMB2W3X.qsbcg.cn
http://Agq4wKLl.qsbcg.cn
http://www.dtcms.com/a/370460.html

相关文章:

  • 基于区块链的IoMT跨医院认证系统:Python实践分析
  • 用内存顺序实现 三种内存顺序模型
  • rh134第五章复习总结
  • Java包装类型
  • Linux awk 命令使用说明
  • 一个正常的 CSDN 博客账号,需要做哪些基础准备?
  • 文件I/O与I/O多路复用
  • protobuf的序列反序列化
  • Linux/UNIX系统编程手册笔记:共享库、进程间通信、管道和FIFO、内存映射以及虚拟内存操作
  • 吴恩达机器学习(九)
  • 基于多级特征编码器用于声学信号故障检测模型
  • 【LeetCode热题100道笔记】二叉树中的最大路径和
  • The Open Group 宣布成立Industrial Advanced Nuclear™ 联盟)
  • 问题:指令译码前控制信号还没有产生,那么如何控制译码前指令的动作呢?
  • 软件测试理论
  • Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
  • ChatGPT下的相关聊天提示词
  • C# WinForm分页控件实现与使用详解
  • 在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • 设计艺术~缓存结构设计
  • 腾讯混元游戏视觉生成平台正式发布2.0版本
  • MySQL整理【01】
  • MQTT 与 Java 框架集成:Spring Boot 实战(三)
  • docker 推送仓库(含搭建、代理等)
  • 了解Python
  • LeetCode //C - 848. Shifting Letters
  • 数学判官为中医续命
  • 华为OmniPlacement技术深度解析:突破超大规模MoE模型推理瓶颈的创新设计
  • Web Worker 从原理到实战 —— 把耗时工作搬到后台线程,避免页面卡顿
  • [网络入侵AI检测] docs | 任务二分类与多分类