leetcode-148. 排序链表(链表排序)

leetcode-148. 排序链表(链表排序)给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[] 提示:链表中节点的数目在范围 [0, 5 * 104] 内-105 <= Node.val &lt

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

进阶:

你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?

示例 1:


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


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

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

提示:

链表中节点的数目在范围 [0, 5 * 104] 内
-105 <= Node.val <= 105
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */
class Solution { 
   
public:
    ListNode* sortList(ListNode* head) { 
   
        int num = 0;
        ListNode * pp = head;
        while(pp)pp = pp->next,num ++;
        ListNode *last = NULL;
        int l = 0;
        ListNode *p1 = NULL,*p2 = NULL,*p = NULL,*pt = NULL,*ptt = NULL;
        ListNode *p1e = NULL,*p2e = NULL;
        ListNode *t = new ListNode();
        for(int len = 2;len < 2 * num;len *= 2){ 
   
            bool start = true;
            p = head;
            last = NULL;
            for(int i = 0;i < (num + len - 1)/ len;i ++){ 
   
                l = 0;
                p1 = p2 = NULL;
                p1 = p;
                pt = t;
                p1e = p2e = NULL;
                ptt = pt;
                while(p){ 
   
                    p = p->next;
                    l ++;
                    if(l == len / 2){ 
   
                        p1e = p;
                        p2 = p;
                    }
                    if(l == len){ 
   
                        p2e = p;
                        break;
                    }
                }
                while(p1 && p2 && p1 != p1e && p2 != p2e){ 
   
                    if(p1->val < p2->val)pt->next = p1,pt=pt->next,p1=p1->next;
                    else pt->next = p2,pt=pt->next,p2=p2->next;
                }
                while(p1 && p1 != p1e){ 
   
                    pt->next = p1;
                    pt=pt->next;
                    p1=p1->next;
                }
                while(p2 && p2 != p2e){ 
   
                    pt->next = p2;
                    pt=pt->next;
                    p2 = p2->next;
                }
                if(start)head = ptt->next,start = false;
                if(last != NULL)last->next = ptt->next;
                last = pt;
            }
            pt->next = NULL;
        }
        return head;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168551.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网孔型高级维修电工实训装置

    网孔型高级维修电工实训装置ZN-88CCV网孔型高级维修电工实训装置一、概述ZN-88CCV网孔型高级维修电工实训装置主要由实训桌、网孔板、实训元器件(也可自购)组成。学生根据实训线路进行元器件的合理布局,安装、接线全部由学生自行完成,接近工业现场,能完成电工基础电路,电机控制线路,照明配电的模拟操作,PLC可编程综合应用线路,电子技术应用电路的综合实训,通过一系列项目实训培养学生动手能力和实操技能。实训项目可自行确定,根据所选的项目选择相应的元器件。该装置也可作为电工考工的考核设备。二、特点1、实训采用网孔板与挂箱相结合

    2022年6月6日
    33
  • 论文阅读报告_小论文

    论文阅读报告_小论文FactorizingYAGOScalableMachineLearningforLinkedData关联数据的可扩展机器学习分解发表于WWW2012–Session:CreatingandUsingLinksbetweenDataObjects摘要:语义Web的链接开放数据(LOD)云中已经发布了大量的结构化信息,而且它们的规模仍在快速增长。然而,由于LOD的大小、部分数据不一致和固有的噪声,很难通过推理和查询访问这些信息。本文提出了一种高效的LOD数据关系学习方

    2025年8月20日
    2
  • C#利用浏览按钮获得文件路径和文件夹路径

    生成文件夹路径privatevoidbtnChoose_Click(objectsender,EventArgse)生成文件夹路径privatevoidbtnChoose_Clic

    2021年12月24日
    42
  • 【5GC】5G网络切片与5G QoS的区别?[通俗易懂]

    【5GC】5G网络切片与5G QoS的区别?[通俗易懂]网络切片是一种5G支持的技术,允许跨移动网络域(接入网、传输网和核心网)创建一个端到端网络实例。理想情况下,每个切片都用特定的网络功能和特性来标识。向终端用户、企业和MVNOs提供专用的端到端网络实例的技术称为“切片”,其中一个网络可以有多个具有不同特征的切片,为不同的用例服务。该技术通过SDN/NFV编排框架实现,该框架为切片提供全生命周期管理,使动态切片(按需实例化和终止切片)具有全服务保证能力。关于SDN/NFV的介绍可以参考我的博客《【SDNvs.NFV】纠缠不清的SDN和NFV》和。。…

    2022年10月2日
    4
  • JVM: GC过程总结(minor GC 和 Full GC)「建议收藏」

    一minorGC和FullGC区别新生代GC(MinorGC):指发生新生代的的垃圾收集动作,MinorGC非常频繁,回收速度一般也比较快。老年代GC(MajorGC/FullGC):指发生在老年代的GC,出现了MajorGC经常会伴随至少一次的MinorGC(并非绝对),MajorGC的速度一般会比MinorGC的慢10倍以上。二minorGC过程详解1在初始阶段,新创建的对象被分配到Eden区,survivor的两块空间都为空。

    2022年4月12日
    39
  • creo每次都要配置config_config配置中心

    creo每次都要配置config_config配置中心前言每个测试用例都应该有config部分,可以配置用例级别。比如name、base_url、variables、verify、export等等案例演示fromhttprunnerimport

    2022年7月31日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号