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

力扣刷题——排序链表

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

    示例 1:

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

    思路:我们可以采用二分加合并两个有序链表的方法,找到链表的中间节点,然后将其分为两个子链表递归的进行合并。因为我们采用了递归,所以在合并两个链表时就会对其进行排序,合并完成后的链表即为有序的。

    class Solution {
        ListNode *Half(ListNode *head)
        {
            ListNode *fast=head;
            ListNode *slow=head;
            ListNode *pre;
            while(fast&&fast->next)
            {
                pre=slow;
                fast=fast->next->next;
                slow=slow->next;
            }
            pre->next=nullptr;
            return slow;
        }
        ListNode *merge(ListNode *head1,ListNode *head2)
        {
            if(!head1) return head2;
            if(!head2) return head1;
            if(head1->val<head2->val)
            {
                head1->next=merge(head1->next,head2);
                return head1;
            }
            head2->next=merge(head1,head2->next);
            return head2;
        }
    public:
        ListNode* sortList(ListNode* head) {
            if(!head||!head->next)
            {
                return head;
            }
            ListNode *head2=Half(head);
            head=sortList(head);
            head2=sortList(head2);
            return merge(head,head2);
        }
    };

    http://www.dtcms.com/a/103304.html

    相关文章:

  • Lua语言脚本环境配置
  • 【uboot1】启动流程,环境变量,实例
  • Ubuntu上给AndroidStudio创建桌面图标
  • API 安全之认证鉴权
  • C++的指针数组、数组指针和指针数组指针
  • 怎么安装JSON服务器?JSON服务器最新安装教程
  • JavaScript中的模块化
  • GitHub Flow与GitLab Flow的详细
  • python求解常微分方程之Galerkin method:权函数
  • 【日期问题(判断星期几)】
  • 有哪些好用的项目管理工具推荐?并且支持AI定制和私有部署的?
  • 简单程序语言理论与编译技术·19 实现一个解释器
  • HTTP新的二进制格式与多路复用
  • 股指期货四个品种合约是什么意思?
  • OpenCV基础——图像滤波和形态学操作
  • 数字化计算机语言特性对比
  • 力扣HOT100之矩阵:48. 旋转图像
  • 《JVM考古现场(十四):混沌重启——从量子永生到宇宙热寂的终极编译》
  • 「Unity3D」TMP_InputField关闭虚拟键盘后,再次打开虚拟键盘,此时无法回调onSelect的问题
  • 文章配图新纪元:OpenAI新推出的GPT-4o原生图像生成功能启示
  • Joint Receiver Design for Integrated Sensing and Communications
  • 双向链表的理解
  • 【Kettle安装】Kettle安装过程, 电脑已安装java23,安装Kettle 出现报错:尝试启动 Java 虚拟机(JVM)时失败解决方法
  • JavaEE-MyBatis概述第一个程序
  • Redis GEO
  • [7-02-02].第15节:生产经验 - 消费者相关操作
  • 农产品直卖平台的设计与实现(代码+数据库+LW)
  • Burpsuite 伪造 IP
  • 数据结构与算法:二维动态规划
  • 图解AUTOSAR_SWS_CANDriver