排序链表问题

news2024/11/22 19:43:38

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表

示例 1:

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

示例 2:

输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]

示例 3:

输入:head = []
输出:[]

代码如下:

//利用自顶而下归并排序的方法,递归地进行计算
class Solution {
public:
    ListNode* sortList(ListNode* head) {
        if(head==nullptr||head->next==nullptr)
        {
            return head;//递归的终止条件
        }
        ListNode* midNode=middleNode(head);//调用寻找重点的函数,定义链表中点
        ListNode* righthead=midNode->next;//定义右边链表的头节点,为中点的下一个
        midNode->next=nullptr;//断开链表中点的后面,分为两个链表

        ListNode* left=sortList(head);//递归,再进行分割和合并
        ListNode* right=sortList(righthead);//将两个链表继续分割,合并

        return mergeTwoList(left,right);//合并两个链表
    }
    //找到链表中点,利用快慢指针的方法
    ListNode* middleNode(ListNode* head){
        if(head==nullptr||head->next==nullptr)
        {
            return head;
        }
        ListNode* slow=head;//定义慢指针
        ListNode* fast=head->next->next;//定义快指针
        while(fast!=nullptr&&fast->next!=nullptr)
        {
            slow=slow->next;//慢指针每次走一步
            fast=fast->next->next;//快指针每次走两步
        }
        return slow;//最终慢指针所指的位置就是链表的中点
    }
    //合并两个有序链表
    ListNode* mergeTwoList(ListNode* l1,ListNode* l2)
    {
        ListNode *prehead=new ListNode(-1);//引入伪头节点,在头节点之前,防止头节点的丢失
        ListNode *prev=prehead;//定义新的链表

        while(l1!=nullptr&&l2!=nullptr)
        {
            if(l1->val<l2->val)
            {
                prev->next=l1;//当l1的值<l2的值,将l1的值添加到新的链表中
                l1=l1->next;//将l1的链表节点后移
            }
            else
            {
                prev->next=l2;//当l2的值<l1的值,将l2的值添加到新的链表中
                l2=l2->next;//将l2的链表节点后移
            }
            prev=prev->next;//使新的链表节点后移
        }
        prev->next=l1==nullptr?l2:l1;//在合并完两个链表之后,最多只有一个节点没有被合并,在链表末尾直接返回未被合并的链表
        return prehead->next;//返回新的链表
    }
};

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

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

相关文章

Hadoop下载安装(物理机)

1、下载Hadoop安装包## http://archive.apache.org/dist/hadoop/common 2、解压安装Hadoop 将hadoop-2-7.4.tar.gz包上传到/root/export/software目录 cd /root/export/software mkdir /root/exprot/servers tar -zxvf hadoop-2.7.4.tar.gz -C /root/export/servers/3、配置…

第三届DeepModeling黑客松竞赛

今年的Hackathon难度梯度设置很广&#xff0c;有偏向硬核开发的&#xff0c;有偏向应用的&#xff0c;还有面向初学者的教学布道赛道&#xff01;欢迎大家来围观&#xff01; 参赛链接

【抽奖实现源码】原生js实现简单九方格抽奖实现(附源码下载)

文章目录 写在前面涉及知识效果图1、搭建抽奖页面2、设置抽奖样式1&#xff09;奖项区块颜色2&#xff09;开始按钮背景色3&#xff09;启动初始块颜色 3、编写抽奖功能4、源码下载1&#xff09; 百度网盘2&#xff09;123云盘 总结 写在前面 之前在一次线下活动大屏上看到一个…

招商银行、江苏银行争相入局AIGC,“老银行”能否讲出“新故事”?

文 | 新熔财经 作者 | 和花 由ChatGPT引发的“大语言模型热潮”还没有过去。 六月&#xff0c;A股市场ChatGPT概念指数入选后股价涨幅超过20%的就超过30支&#xff0c;涨幅超过50%也有将近20支&#xff0c;像昆仑万维、万兴科技、神州泰岳、汤姆猫等公司&#xff0c;更是借着…

Qt扫盲-QMouseEvent 鼠标事件

QMouseEvent 鼠标事件理论 一、概述二、鼠标事件的传递三、组合修饰符四、鼠标坐标位置五、使用方式 一、概述 当在QWidget窗口内的鼠标按钮被按下或释放&#xff0c;或者鼠标光标被移动时&#xff0c;就会发生鼠标事件。 鼠标按下释放没有什么特殊的&#xff0c;但是鼠标移动…

数据可视化利器:五个常见组件助您洞察数据

数据可视化组件是在数据分析展示中我们离不开的工具&#xff0c;可以帮助我们更直观地理解和分析数据。不同的数据可视化组件适用于不同类型的数据&#xff0c;本文介绍五个常见的可视化组件以及它们适合展示的数据类型。 柱状图&#xff08;Bar Chart&#xff09;&#xff1a…

美团太狠:100亿级分库分表,不停机迁移,如何处理?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如腾讯、美团、阿里、拼多多、极兔、有赞、希音的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; 数据库如何不停机迁移?100亿级库表&#xff0c;如何不停机迁移&a…

开放式耳机和封闭式耳机有什么区别,那开放式耳机对耳朵伤害大吗?

开放式耳机从字面意思可以理解为&#xff1a;开放耳朵&#xff0c;不需要入耳就可以听见声音的耳机。这种耳机最大的优点就是不压迫不封闭耳道&#xff0c;而且在听耳机音的同时能够及时注意到周围环境的声音&#xff0c;从而可以避免到一些安全事故的发生。 第一点&#xff1a…

台灯选a级还是aa级?科普a级台灯和aa级台灯的区别

我们经常能听到a级台灯aa级台灯&#xff0c;那么里面所说的a级、aa级到底是什么意思呢&#xff1f;其实这里所说的是国A级照度和国AA级照度标准的台灯&#xff0c;是根据国家颁布的《读写作业台灯性能要求》区别的&#xff0c;只有符合其标准的台灯才能被称为护眼台灯&#xff…

学习笔记整理-UML建模与应用复习3-动态模型

动态模型是用来描述系统的动态行为&#xff0c;分为状态模型和交互模型。 其中状态模型分为状态图和活动图&#xff1b;交互模型分为时序图和协作图。 一、交互模型 时序图是描述信息交换时的时间顺序&#xff0c;而协作图是描述系统对象之间共同完成系统功能的要求。 1、时序…

【网络技术】TCP详解

1 TCP是什么 TCP是Transmission Control Protocol的缩写&#xff0c;即传输控制协议。 TCP是一种面向连接的、可靠的、基于字节流的传输协议&#xff0c;是互联网通信协议TCP/IP中的一个重要组成部分。 2 三次握手 三次握手的过程可以用以下图示表示&#xff1a; 2.1 详细介绍…

php命令执行漏洞加固

首先需要去看一下命令执行漏洞的代码&#xff1a; 就像这样&#xff0c;我们可以利用管道符来进行执行一些命令。 我们在网站中渗透一下&#xff1a; 配合上管道符&#xff0c;我们就可以进行执行命令。 这样的话我们总么进行加固呢&#xff0c;我们可以利用if语句来进行加固…

Hadoop启动后没有NameNode进程,日志报ulimit -a for user root

环境&#xff1a;CentOS7、Hadoop2.6.4 背景&#xff1a;安装后启动正常&#xff0c;一段时间在来启动发生这种情况。 现象&#xff1a; 启动后没有NameNode进程&#xff0c;于是查看日志&#xff0c;日志显示ulimit -a for user root&#xff0c;潜意识还以为文件不能读。&a…

期货反向跟单系统能精准捕捉买卖点嘛?什么人不适合做期货反向跟单?

期货反向跟单&#xff0c;就是指在期货市场上&#xff0c;根据某些大户或者专业机构的交易动向&#xff0c;采取与之相反的操作策略&#xff0c;以期获得利润。例如&#xff0c;当发现某个大户在买入某种期货合约时&#xff0c;就立即卖出同样数量的合约&#xff0c;反之亦然。…

MQTT协议学习

前言 最近在学习mqtt协议&#xff0c;看的是官方英文版的&#xff0c;写这篇博客就是为了将一些关键内容提取出来&#xff0c;以便日后的查询和复习&#xff0c;有需要的可以参考。官方的文档在这&#xff1a; MQTT Essentials - All Core Concepts explained (hivemq.com) …

svn下载及使用

下载 链接&#xff1a;https://pan.baidu.com/s/1RV6vAujA1anHhXJuKbItUQ?pwdflzx 提取码&#xff1a;flzx 这是svn安装包以及中文安装包&#xff0c;放在百度网盘了&#xff0c;有需要可以下载 注意&#xff1a;svn中文语言包安装的版本需要和svn的版本一致 他有两种安装…

ModaHub魔搭社区:向量数据库Milvus产品问题(一)

目录 产品问题 Milvus 会收费吗&#xff1f; Milvus 支持非 x86 平台吗&#xff1f; Milvus 支持对向量的插入、删除、更改和查询操作吗&#xff1f; Milvus 可以处理百亿或千亿级数据吗&#xff1f; Milvus 数据存储在哪里&#xff1f; 为什么我在 SQLite / MySQL 找不…

实时监测:BL102 PLC网关在水利设施中的数据采集

随着工业智能化的快速发展&#xff0c;BL102 PLC网关作为一种先进的工业自动化设备&#xff0c;在泵站远程监测领域发挥了重要的作用。通过BL102 PLC网关&#xff0c;我们可以实现对泵站PLC的远程监测和控制&#xff0c;从而提高泵站的工作效率和管理水平。 ​一、BL102 PLC网关…

机器人轨迹生成:轨迹规划与路径规划

机器人轨迹生成涉及到轨迹规划和路径规划两个关键概念&#xff0c;它们是机器人运动控制中的重要组成部分。下面对轨迹规划和路径规划进行深入比较。 轨迹规划&#xff08;Trajectory Planning&#xff09;&#xff1a; 定义&#xff1a;轨迹规划是指在机器人运动中确定机器人末…

【设计模式】第十六章:迭代器模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…