【LeetCode力扣】86. 分隔链表

news2024/12/23 9:31:03

 

目录

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.coloradmin.cn/o/1113757.html

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

相关文章

2048天创作纪念日

2048天创作纪念日 初心收获日常成就憧憬 初心 大一的时候&#xff0c;老师上课说可以通过浏览他人博客或者自己写博客来学习编程。从那以后&#xff0c;写博客这件事情就埋在了我心里&#xff0c;但是我一直没有什么内容想写。直到入选了ACM校队后&#xff0c;需要经常做大量的…

【算法|动态规划No.24】leetcode LCR 093. 最长的斐波那契子序列的长度

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

wireshark抓包解密TLS,解决个人环境看不到明文流量

wireshark抓包浏览器流量 https://monkeywie.cn/2020/08/07/wireshark-capture-https/ 解密TLS流量 按照上面的步骤抓到流量后&#xff0c;正常是可以看到明文数据&#xff0c;但在我的wireshark上一直看不到。因为有其它替代方案&#xff08;在反向代理后面抓包、fiddler&a…

2023下半年信息系统集成设计师选择题

选择题 第一章 信息基础知识第二章 信息系统集成第三章 专业技能知识第四章 项目管理一般知识第五章 项目立项管理第六章 项目整体管理第七章 项目范围管理第八章 项目进度管理第九章 项目成本管理第十章 项目质量管理第十一章 项目管理干系人第十三章 合同管理第十五章 配置管…

springBoot整合讯飞星火认知大模型

1.概述 讯飞星火大模型是科大讯飞最近开放的拥有跨领域的知识和语言理解能力的大模型&#xff0c;能够完成问答对话和文学创作等。由于讯飞星火大模型最近可以免费试用&#xff0c;开发者都可以免费申请一个QPS不超过2的账号&#xff0c;用来实现对平台能力的验证。本文将利用…

好物周刊#27:音乐助手

https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. lamp 快速开发平台 lamp-cloud 基于 Jdk11 SpringCloud SpringBoot …

【LeetCode】101. 对称二叉树

101. 对称二叉树&#xff08;简单&#xff09; 方法&#xff1a;递归 思路 两个树互为镜像的条件&#xff1a; 它们的两个根结点具有相同的值。每个树的右子树都与另一个树的左子树镜像对称。 因此&#xff0c;我们需要递归比较左子树和右子树&#xff0c;将根节点的左子树记…

线程池在项目中的使用

1.runAsync执行完后无返回值 package com.search.thread; import java.util.concurrent.*; public class ThreadTest {public static ExecutorService executor Executors.newFixedThreadPool(10);public static void main(String[] args) throws ExecutionException, Interr…

极米投影仪怎么样?轻薄投影极米Z7X值得选择吗?

对于当代快节奏的打工人而言&#xff0c;我们有时候很需要一些独特的方式来逃离日常生活的疲惫&#xff0c;拥有一个自己的空间&#xff0c;享受一个人的独处时光。要想享受居家独处好时光&#xff0c;当然少不了家居娱乐好伙伴极米Z7X。无论你是想要看一场科幻大片&#xff0c…

gin框架39--重构 BasicAuth 中间件

gin框架39--重构 BasicAuth 中间件 介绍gin BasicAuth 解析自定义newAuth实现基础认证注意事项说明 介绍 每当我们打开一个网址的时候&#xff0c;会自动弹出一个认证界面&#xff0c;要求我们输入用户名和密码&#xff0c;这种BasicAuth是最基础、最常见的认证方式&#xff0…

Godot 官方2D C#重构(2):弹幕躲避

前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 实现效果 技术点说明 异步函数 Godot的事件不能在Task中运行&#xff0c;因为会导致跨线程的问题。 //这样是不行的&#xff0c;因为跨线程了&#xff0c;而且会阻塞UI线程&#xff0c;具体原因…

高效恢复丢失的文件的10 款Android数据恢复工具

在当今快节奏的数字时代&#xff0c;从Android设备丢失重要数据可能是一场噩梦。 您需要一个可靠的恢复工具来取回您的数据&#xff0c;例如令人难忘的照片&#xff0c;重要的联系人&#xff0c;重要的工作文档等。 值得庆幸的是&#xff0c;有许多高效的Android数据恢复工具可…

2023年中国人力资源咨询发展历程及市场规模前景分析[图]

人力资源咨询是企业借助外部智力资源提高自身管理水平和效率的重要路径&#xff0c;属于管理咨询业的一个重要分支, 一方面&#xff0c;人力资源咨询要为企业提供基础的人力资源外包服务&#xff1b;另一方面&#xff0c;人力资源咨询要为企业提供专业化、职业化现代人力资源管…

《深入浅出OCR》实战:基于DBNet的文字检测

✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。 💙个人主页: GoAI |💚 公众号: GoAI的学习小屋 | 💛交流群: 7049325…

【LeetCode】54. 螺旋矩阵

1 问题 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1a;matri…

「Qt中文教程指南」如何创建基于Qt Widget的应用程序(三)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文描述了如何使用…

多态的使用以及多态底层的实现(上)

什么是多态 我们让不同的对象去完成同一件事情&#xff0c;这件事情的结果是不一样的&#xff0c;例如买火车票&#xff0c;我们学生买火车票&#xff0c;普通人买火车票&#xff0c;或是军人买火车票最后结果都是不一样的。 多态的要求是什么 首先一定是要在继承中 虚函数…

机器学习笔记 - 深度学习中跳跃连接的直观解释

一、概述 如今人们利用深度学习做无数的应用。然而,为了理解在许多作品中看到的大量设计选择(例如跳过连接),了解一点反向传播机制至关重要。 如果你在 2014 年尝试训练神经网络,你肯定会观察到所谓的梯度消失问题。简单来说:你在屏幕后面检查网络的训练过程,你看到的只…

AI驱动的未来:探索人工智能的无限潜力 | 开源专题 No.39

这一系列开源项目代表着多个领域的最新技术成果&#xff0c;包括深度学习、自然语言处理、计算机视觉和分布式训练。它们共同的特点是致力于教育、资源分享、开源精神、多领域应用以及性能和效率的追求&#xff0c;为广大开发者、研究者和学生提供了宝贵的工具和知识&#xff0…

layui框架实战案例(21):layui table单元格显示图片导致复选框冗余的解决方案

图片自适应表格CSS 为防止单元格内的图片不能正常显示&#xff0c;需本地重写CSS。 /*layui-table图片自适应*/ .layui-table-cell {height: auto;line-height: 20px;}.layui-table-cell img {height: 50%;max-width: 50%; }列代码 , cols: [[{type: checkbox,fixed:left, w…