【LeetCode】数据结构题解(5)[分割链表]

news2024/11/15 15:55:07

分割链表

  • 1.题目来源
  • 2.题目描述
  • 3.解题思路
  • 4.代码展示

所属专栏:玩转数据结构题型
博主首页:初阳785
代码托管:chuyang785
感谢大家的支持,您的点赞和关注是对我最大的支持!!!
博主也会更加的努力,创作出更优质的博文!!
关注我,关注我,关注我,重要的事情说三遍!!!!!!!!

1.题目来源

分割链表

2.题目描述

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你不需要 保留 每个分区中各节点的初始相对位置。
在这里插入图片描述

3.解题思路

本题的意思就是说把下小于x的数据放在左边,大于等于x的数据放在右边,在改变顺序的同时不改变原来的的循序。
我们的思路是创建两个链表,一个链表LessHead放小于下的数据,另一个链表greaterHead放大于等于x的数据,最后把两个两边合并成一个链表,然后返回新链表的首节点地址就行了。

为了方便链接,我们使用创建哨兵的方法来作为两个链表的头节点,所谓哨兵为就是它的val是无效数据,但是它的next指向下一个地址。
接着我们创建一个变量cur来遍历我们的链表,然后根据他们的大小来给他们分配到不同的链表里去。

图解:
在这里插入图片描述
当x=3 的时候,cur开始遍历,首先是第一个节点的数据是1它比3小我们就把他链接到我们的LessHead链表中去,同时我们用LessNext来记录链接过来的节点点的地址,在以后往后链接的时候只需要用LessHead表示就好,这样的好处是链接完后我们返回链表的头节点的地址的时候就直接返回LessHead就行了。
在这里插入图片描述
同样的cur遍历完第一个后只需要是cur=cur->next就可以访问第二个节点了,因为我们在链接第一个节点的时候并没有破坏我们第一个节点指向我们第二个节点的通道,我们依然可以通过第一个节点找到第二个节点,同样的我们用greaterNext来表示我们接下来的节点地址。
在这里插入图片描述
以此类推到我们的cur指向NULL的时候我们的循环就停止了。
接着就是将两个链表合并就行。
在这里插入图片描述
我们只需要将lessTail->next=greaterHead->next;就行了。
但是这里有个特别重要的事情就是我们连接完后我们的greaterNext指向那里了?它真的就指向了NULL吗?答案是否定的。
我们回到之前链接的时候:
在这里插入图片描述
我们看到这里我们的存放5数据的next是指向2的地址的。
在这里插入图片描述

所以他的图像解析就变成了这个样子,如果是这样的话,就成环了,再返回地址的时候内存就会出问题。
所以这里的解决方案就是把我们的greaterNext->next置空即:greaterNext->next=NULL。

4.代码展示

struct ListNode* partition(struct ListNode* head, int x)
{
    //创建哨兵位,方便链接
    struct ListNode* lessHead,*lessTail,*greaterHead,*greaterTail;
    //存放小于x的数据
    lessHead=lessTail=(struct ListNode*)malloc(sizeof(struct ListNode));
    lessHead->next=NULL;
    
	//存放大于等于x的数据
    greaterHead=greaterTail=(struct ListNode*)malloc(sizeof(struct ListNode));
    greaterHead->next=NULL;
	
	//遍历链表指针
    struct ListNode* cur=head;

    while(cur)
    {
        //尾插
        if(cur->val < x)
        {
            lessTail->next=cur;
            lessTail=cur;
        }
        else
        {
            greaterTail->next=cur;
            greaterTail=cur;
        }
        cur=cur->next;
    }
    //链接两个链表
    lessTail->next=greaterHead->next;
    //消除环,我们的5最后还指向我们2,这个时候就形成了一个环、
    greaterTail->next=NULL;

    struct ListNode* newnode=lessHead->next;
    //最后释放两个创建的内存空间
    free(lessHead);
    free(greaterHead);
    return newnode;
}

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

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

相关文章

聊一聊 GDB 调试程序时的几个实用命令

一&#xff1a;背景 1. 讲故事 用惯了宇宙第一的 Visual Studio 再用其他的开发工具还是有一点不习惯&#xff0c;不习惯在于想用的命令或者面板找不到&#xff0c;总的来说还是各有千秋吧&#xff0c;今天我们来聊一下几个在调试中比较实用的命令&#xff1a; 查看内存硬件…

B站java、计算机学习整理(菜鸟版本)

B站java、计算机学习整理&#xff08;菜鸟版本&#xff09; 简介1、入门篇2、工具篇3、数据库篇4、框架篇5、JVM 篇6、源码篇7、算法与数据结构8、操作系统9、计算机组成原理10、计算机网络11、 设计模式 简介 处在互联网时代&#xff0c;是一种幸福&#xff0c;因为各式各样的…

Win10系统开机自动蓝屏无法使用怎么U盘重装系统?

Win10系统开机自动蓝屏无法使用怎么U盘重装系统&#xff1f;今天和大家一起来分享Win10系统蓝屏之后怎么去进行修复的方法。很多用户都有遇到电脑蓝屏无法启动的问题&#xff0c;那么遇到这个问题之后怎么去重装系统呢&#xff1f;接下来我们来看看以下的解决方法分享吧。 准备…

Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 今天来分享一下如何使用Python突破某网游游戏JS加密限制&#xff0c;进行逆向解密&#xff0c;实现自动登录。 逆向目标 目标&#xff1a;某 7 网游登录 主页&#xff1a;aHR0cHM6Ly93d3cuMzcuY29tLw 接口&#xff1a;aHR…

牛客_华为_ HJ63 DNA序列

HJ63 DNA序列 st input() n int(input())max_ratio 0 ratio 0 res for i in range(0,len(st)-n1):s st[i:in]ratio s.count(C)s.count(G)if ratio > max_ratio:max_ratio ratiores s print(res)

cPanel XSS漏洞分析研究(CVE-2023-29489)

一、漏洞原理 漏洞简述 cPanel 是一套在网页寄存业中最享负盛名的商业软件&#xff0c;是基于于 Linux 和 BSD 系统及以 PHP 开发且性质为闭源软件&#xff1b;提供了足够强大和相当完整的主机管理功能&#xff0c;诸如&#xff1a;Webmail 及多种电邮协议、网页化 FTP 管理、…

【考前看几题】系统集成项目管理师-2022年上半年-上午真题(广东卷)

前言 汇总知识点、重点问题、难点 由问题引出知识点 软件技术、其他技术、管理基础、整体管理、范围管理、成本管理、人力资源管理 干系人管理、合同管理、采购管理、配置管理、质量管理、风险管理、安全管理 文章目录 前言软件技术、其他技术管理基础整体管理范围管理成本管理…

第12届蓝桥杯国赛真题剖析-2021年5月29日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第128讲。 第12届蓝桥杯Scratch国赛真题&#xff0c;这是2021年5月29日举办的全国总决赛&#xff0c;比赛仍然采取线上…

【java】Java 异常处理的十个建议

文章目录 前言一、尽量不要使用e.printStackTrace(),而是使用log打印。二、catch了异常&#xff0c;但是没有打印出具体的exception&#xff0c;无法更好定位问题三、不要用一个Exception捕捉所有可能的异常四、记得使用finally关闭流资源或者直接使用try-with-resource五、捕获…

TCP协议特性讲解

文章目录 TCP报文结构确认应答超时重传三次握手与四次挥手滑动窗口流量控制拥塞控制延时应答捎带应答面向字节流 - 粘包问题异常处理 - 心跳包 TCP报文结构 16位源端口号&#xff1a;表示数据从哪来的。 16位目的端口号&#xff1a;表示数据要到哪里去。 32位序号&#xff1a;由…

Centos7 安装 MySql8

1、查看是否安装 mariadb rpm -qa | grep mariadb 显示&#xff1a;mariadb-libs-5.5.56-2.el7.x86_64 2、卸载 mariadb rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 3、安装 mysql 依赖包 yum install libaio 4、创建 mysql 安装目录 mkdir /usr/local/mysql 创…

【完整攻略】OPPO手机无密码解锁方法

全世界有数百万人拥有 OPPO 手机。它以其经济实惠但功能强大的智能手机而闻名。但是&#xff0c;与许多其他人一样&#xff0c;您可能会在某些日子后忘记密码。那么&#xff0c;如果您忘记了 OPPO 手机的密码或图案怎么办&#xff1f;你将如何解锁它&#xff1f;这是一个大问题…

Java+大数据学习笔记分享!

今天给大家分享一个笔记网站&#xff01; 我在码云中整理超全面学习笔记内容&#xff01; Gitee地址&#xff1a;https://gitee.com/fanggaolei/learning-notes-warehouse 项目中目前包含了大数据和Java后端方向的全部学习笔记&#xff0c;同样也是一个学习路线&#xff0c;笔记…

1-photoshop--修改图片内容--填充的使用

一、photoshop--修改图片内容--填充的使用&#xff1a; 在photohsop中没有发现图形填充功能&#xff0c;如何实现功能&#xff1f; 需要把这个图片中的原有文字覆盖 &#xff0c;1.使用吸管工具 &#xff0c;获取图片背景颜色&#xff0c;前景色为需要的颜色 2.在需要的选择进…

采购管理怎么做(详解采购工作流程)

阅读本文您将了解&#xff1a;1.采购管理的意义&#xff1b;2.采购工作流程&#xff08;中小企业&#xff09;&#xff1b;3.采购管理未来发展趋势。 一、采购管理的意义 采购管理是指企业为满足生产经营需要&#xff0c;对外部供应商进行的采购活动的规划、组织、实施和控制…

RocketMQ-ONS 内存占用过大问题处理

RocketMQ-ONS 内存占用过大问题处理 1、问题环境描述2、问题现像描述3、问题分析3.1、问题定位阶段1&#xff08;确认内存占用原因&#xff09;3.2、问题定位阶段2&#xff08;缓存参数配置无效问题&#xff09;3.3、问题定位阶段2&#xff08;分析占用原因&#xff09; 4、解决…

详解文件操作和 IO

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;javaEE初阶 &#x1f397;️ 如何优雅的活着&#xff0c;是我找寻的方向 目录 一、认识文件二、文件路径三、文件系统操作四、文件内容的操作读写 - 数据流4.1 InputStream 概述4.2 OutputStream 概…

快讯 | ALVA Systems 参加 Open Bosch 首届 Demo Day 活动

4 月 27 日&#xff0c;博世&#xff08;中国&#xff09;投资有限公司&#xff08;下以“博世”简称&#xff09;在上海总部举办 Open Bosch 第一届 Demo Day 活动&#xff0c;展示与初创伙伴的合作项目成果&#xff0c;宣传合作理念&#xff0c;为初创伙伴搭建参观交流的开放…

【Matter】esp-matter开发环境搭建

文章目录 esp-matter开发环境搭建前提准备1.Ubuntu22.04&#xff08;内存不小于80G&#xff09;2.网络环境 esp-idf 开发环境搭建1.Problem1 solution2.Problem2 solution esp-matter开发环境搭建 esp-matter开发环境搭建 前提准备 1.Ubuntu22.04&#xff08;内存不小于80G&am…

vs可视化界面使用git变基

天天都在使用git&#xff0c;听说过变基这个名词&#xff0c;但是并没有实操过变基&#xff0c;正好今天有个同事说起一件事情&#xff1a;提交代码的时候有太多的自动合并&#xff0c;如果需要回退版本&#xff0c;操作起来很困难&#xff0c;理想状态下&#xff0c;应该就只有…