编程题—leetcode:148. 排序链表

Leetcode编程题:高频题100道 难度 简单:26 中等:59 困难:15 题目类型 数组:字符串:二叉树:动态规划: 题号 题目 难度 标签 1 两数之和 简单 2 两数相加 中等 3 无重复字符的最长子串 中等 4 寻找两个有序数组的中位数 困难 5 最长回文子串 中等 10 正则表达式匹配 困难 11 盛最多水的容器 中等 15 三数之和 中等 17 电话号码的... 阅读详情
题目链接
题目描述
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。

示例 1:

输入: 4->2->1->3
输出: 1->2->3->4
示例 2:

输入: -1->5->3->4->0
输出: -1->0->3->4->5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路

1、使用归并排序进行解决
2、首先进行分组,归并的区间按照1,2,4,8,16逐渐递增
3、然后找到要归并的链表头p和q进行归并
4、start的意思就是链表的开头
5、l用来表示每次归并完的链表头
6、flag表示在一次合并中下一次起始的节点

通过代码
class Solution {
    public ListNode sortList(ListNode head) {
        if (head==null) return null;
        ListNode k=head;
        int num=0;
        while(k!=null){
            num++;
            k=k.next;
        }
        ListNode start =new ListNode(0);
        start.next=head;
        ListNode flag=head;
        ListNode l=start;
        for(int base=1;num>base;base*=2){
            head=l.next;
            start= new ListNode(0);
            l=start;
            ListNode p=head;
            flag=head;
            int pause=0;
            while (flag!=null){
                pause=0;
                p=flag;
                int count=base;
                ListNode q=p;
                while(count--!=0){
                    q=q.next;
                    if (q==null){
                        pause=1;
                        break;
                    }
                }
                if (pause==1){
                    break;
                }
                int count1=base;
                flag=q;
                while(count1--!=0&&flag!=null){
                    flag=flag.next;
                }
                //比较的起点p和q已经找到
                int c1=base,c2=base;
                //归并链表
                for(;(c1!=0)&&(c2!=0)&&(p!=null)&&(q!=null);){
                    if (p.val>q.val){
                        start.next=q;
                        q=q.next;
                        c2--;
                    }else{
                        start.next=p;
                        p=p.next;
                        c1--;
                    }
                    start=start.next;
                }
                //如果p链表还没合并完
                while (c1!=0&&p!=null){
                    start.next=p;
                    p=p.next;
                    start=start.next;
                    c1--;
                }
                //如果q链表还没合并完
                while (c2!=0&&q!=null){
                    start.next=q;
                    q=q.next;
                    start=start.next;
                    c2--;
                }
                start.next=flag;
            }
        }
        return l.next;
    }
}
Leetcode编程题:精选面试高频题目150道 Leetcode精选面试高频题目150道 难度 简单:47 中等:76 困难:22 题目类型 数组:字符串:二叉树:动态规划: 题号 题目 难度 标签 1 两数之和 简单 2 两数相加 中等 3 无重复字符的最长子串 中等 4 寻找两个有序数组的中位数 困难 5 最长回文子串 中等 7 整数反转 简单 8 字符串转换整数 (atoi) 中等 ... 阅读详情

相关推荐

CGNS快速入门到实战(一):CGNS静态链接库编译

近期,由于需要将CGNS格式加入到教研组自编CFD求解器DUBHE中,所以本人展开了对于CGNS的学习。CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库编写;(三)CGNS文件及案例展示。本篇文章重点讲述CGNS静态链接库编译。

ahang_99的博客 3819

数据结构——图(邻接链表)

邻接链表 邻接矩阵是不错的⼀种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的。比如说,如果我们要处理下图这样的稀疏有向图,邻接矩阵中除了arc[1][0]有权值外,没有其他弧,其实这些存储空间都浪费掉了。 因此选择一种新的数据结构来存储这种稀疏图则尤为重要了。此时则使用链表结构来存储原来的连接信息。 定义如下数据结构 //图的邻接链表存储结构 //...

zouzp的博客 1万+

用Arduino和RC522模块DIY一个NFC门禁卡复制器(附完整代码)

本文详细介绍了如何利用Arduino和RC522模块DIY一个NFC门禁卡复制器,包括硬件连接、软件配置、数据读写技术及完整代码实现。通过本教程,电子爱好者可以深入了解NFC技术,并构建自己的智能门禁系统,适用于家庭安全、办公场所等多种场景。

weixin_33704591的博客 500

python链表——链表删除节点p

输入:第三个节点p, (1->2->3->4->5->6) 输出: 1->2->3->4->5->6 1. 如果p节点是尾结点,则无法通过p直接删除 2. 如果不是,可以把p.next节点的值赋值给p,然后删除p.next节点即可。 代码 from DataStructure.LinkedList import LinkedL...

chenlibao0823的博客 2171

远程桌面项目

远程桌面项目

weixin_41560737的博客 1933

用Typora画流程图和序列图:Mermaid语法实战教程(含常见报错解决)

本文是一份详细的Typora与Mermaid语法实战教程,教你如何在Markdown文档中高效绘制流程图和序列图。文章涵盖从环境配置、核心语法到复杂图表构建的全过程,并重点解析了常见报错原因与解决方案,助你将可视化图表无缝融入文档工作流。

weixin_29279101的博客 298

p=p->next 表达了什么意思

问题:->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”.举个例子:struct Data{int a,b,c;}; /*定义结构体*/struct Data * p;/*定义结构体指针*/struct Data A =...

老鱼的故事 4万+

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

Coding... 2851

链表(创建、插入)

创建链表的代码 #include<iostream> using namespace std; //使用结构体表示链表的节点类型 struct Node{ int data; Node*next; }; int main(){ Node*head,*p,*q; head=NULL;//头指针初始为空 int n;//表示需要输入数据的...

PP喜的博客 5880

13、离散时间系统建模与分析

本文系统介绍了离散时间系统的建模与分析方法,涵盖连续时间模型的离散化过程、系统稳定性判断准则、输入输出模型转换方法以及有限脉冲响应和阶跃响应模型的应用。通过多个示例详细展示了不同系统在离散化过程中的特性变化,并探讨了采样间隔对系统动态特性的影响。此外,文章还分析了时间延迟的处理方法,并总结了关键知识点及操作步骤,为离散时间系统的实际应用提供了理论基础和实践指导。

2w3e4r5t6y的博客 188

如何用DeepSeek写年底工作总结?——从入门到精通的全流程指南

AI助手DeepSeek如何高效撰写工作总结 摘要:本文介绍如何利用DeepSeek智能AI助手高效完成工作总结写作。工作总结具有结构固定、语言规范、内容数据化三大特性,而DeepSeek的结构化生成、风格适配、数据整合和迭代优化四大核心能力与之完美匹配。文章提出"准备-搭架-填充-优化"四步工作法:1)精准输入岗位、时间范围等核心信息;2)先搭建逻辑清晰的提纲框架;3)分模块填充具体内容,突出数据与案例;4)通过风格润色和细节补充进行优化。通过合理运用多模态材料处理能力,DeepSee

通俗易懂学IT 286

单链表第i个元素获取、插入、删除;整表创建、删除

获取链表第i个数据的算法思路:1. 声明一个结点p指向链表第一个结点,初始化j从1开始;2. 当j3. 若到链表末尾p为空,则说明第i个元素不存在;4. 否则查找成功,返回结点p的数据。code follow: Struct GetElem(LinkList L, int i, ElemType *e){int j;LinkList p;p = L->next;j = 1;while (p ...

HHHHHHHHHHan的博客 7716

三连杆平面机器人的动力学

0.前言 在这个例子中推导并实现三连杆平面机器人的运动方程。特别的,这里使用拉格朗日法推导运动方程。系统模型如下: 其中在枢轴点处Tm为驱动力矩【一般由伺服电机提供】; b*theta_d:为粘性阻尼扭矩 1、系统方程符号推导前--简介 首先明确欧拉-拉格朗日运动方程: 同样也可以根据作用在多体系统上的非保守力和非保守扭矩来定义广义力Qk。 作用在系统上的广义力的公式为: 其中: Qk:是与广义坐标关联的广义力 Nf_nc :是作用的非保守力的数量 Nt_nc:是作用的非保守扭矩的.

weixin_39090239的博客 4930

算法题 排序链表

摘要 LeetCode 148题要求对链表进行升序排序。采用归并排序算法,分为分割链表、递归排序和合并有序链表三个步骤。自顶向下实现使用快慢指针分割链表,时间复杂度O(n log n),空间复杂度O(log n)(递归栈);自底向上实现通过步长倍增进行迭代合并,空间复杂度优化为O(1)。关键步骤包括:找到中间节点分割链表、递归处理子链表、合并两个有序链表。算法保证了在O(n log n)时间复杂度内完成排序,适合处理链表排序问题。

红血哥 690

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

学渣带你刷Leetcode147. 对链表进行插入排序

题目描述 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例2: 输入: -1->5->3->4->0 输出: -1->0->3->4->5 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/insertion-sort-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 白话题目: 算法: ...

爱学习的小鹏友 213

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Leetcode top100之链表排序

快慢指针起点,slow=head,fast=head.next。链表排序前,注意返回头,排完序后,链表头是变化的。1.使用快慢指针,找到链表的中间节点。2.断开中间连接,对两端递归排序。有快慢指针的技巧和合并链表的技巧。

restart-llyang的博客 171

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

盘点互联网公司最常见的面试编程题

作者 | zglg来源 | Python与算法社区(alg-channel)突破编程题互联网公司面试,笔试环节或第一面往往都是现场做编程题。很多面试的老铁反映说,...

Python大本营的博客 427

[leetcode] 148. Sort List

Description Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2->1->3 Output: 1->2->3->4 Example 2: Input: -1->5->3->4->0 Out...

Learning from the mistakes 275

Leetcode HOT 100 题目总结(已完结)

文章目录前引题目博客链接Easy No.1 - No.21 前引 这段时间感觉动态规划已经做伤了 就是真的没什么动力再做下去了 后面没做的也都是难的不行的dp题目了 想着还是要做的 这段时间换点口味 把力扣HOT 100题给全做了 写个总结 题目博客链接 Easy No.1 - No.21 461. 汉明距离 617. 合并二叉树 104. 二叉树的最大深度 206. 反转链表 169. 多数元素 21. 合并两个有序链表 ...

Love 6's Private Blog 1万+

大型互联网公司最常见的leetcode编程题

字符串全排列问题经常出现公司的笔试题,属于必须要掌握试题

qq_38846089的博客 554

力扣 (LeetCode) 腾讯精选练习 50 题

Tencent-50-Leetcode???? 腾讯精选练习 50 题 ???? ⚡ ???? 如果你有问题https://webvueblog.github.io/Tencent-50-Leetcode/2. 两数相加4. 寻找两个正序数组的中位数5. 最长回文子串7. 整数反转8. 字符串转换整数 (atoi)9. 回文数11. 盛最多水的容器14. 最长公共前缀15. 三数之和16. 最接近的三数之和20....

程序员哆啦A梦,蓝胖子 739

最简形矩阵计算器_盘点互联网公司最常见的面试编程题

作者 | zglg来源 | Python与算法社区(alg-channel)突破编程题互联网公司面试,笔试环节或第一面往往都是现场做编程题。很多面试的老铁反映说,败在了编程题上,去不了自己心仪的公司,拿不到想要的待遇。确实,很遗憾。目前不光在国内,在北美等知名互联网公司,没有一家不做编程题的,可能比我们还要残酷,他们一般是做三道,可能挂掉一道就没有机会进入下一面。所以,无论我们下...

weixin_39941620的博客 232

腾讯50题刷题四&leetcode148

文章目录题目解法一思路代码解法二思路代码 题目 Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2->1->3 Output: 1->2->3->4 Example 2: Input: -1->5->3->4-...

hua111hua的博客 210

Leetcode编程题:腾讯精选练习50题

难度 简单:27 中等:22 困难:3 题目类型 数组:字符串:二叉树:动态规划: 题号 题目 难度 标签 2 两数相加 中等 4 寻找两个有序数组的中位数 困难 5 最长回文子串 中等 7 整数反转 简单 8 字符串转换整数 (atoi) 中等 9* 回文数 简单 11 盛最多水的容器 中等 14 最长公共前缀 简单 15 三数之和...

Coding 900
上一篇: 编程题—LeetCode160. 相交链表
下一篇: 使用Springboot发送邮件
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值