2025年- H33-Lc141 --148. 排序链表(快慢指针,快指针先出发一步)--Java版
1.题目描述


2.思路
时间空间复杂度分别为 O(nlogn) 和 O(1),根据时间复杂度想到二分法,从而联想到归并排序;对数组做归并排序的空间复杂度为 O(n),分别由新开辟数组 O(n) 和递归函数调用 O(logn) 组成,而根据链表特性:

(1)空节点或者1个节点的情况,直接返回头节点
(2)创建两个快慢指针,快指针比慢指针多走一步
(3)当快指针不等于null,以及快指针的下一节点不为空,快2慢1
补充:执行完快2慢1,可以确定链表的中点,也就是slow指针的下一个节点,存储变量,平均切分链表。补充:将慢指针的尾部指向null
(4) 左半部分的链表的头节点,右边部分的头节点
(5)创建虚拟头节点,以及指向头节点的指针pre
(6)进行归并排序,左链表和右链表都不为空,实现链表的升序排序
(7)合并链表的时候,如果左右链表不均匀,就把剩余的一个节点直接补齐到链表上
3.代码实现
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) { this.val = val; }ListNode(int val, ListNode next) { this.val = val; this.next = next; }}public class H148 {public ListNode sortList (ListNode head){
// 1.空节点或者1个节点的情况,直接返回头节点if(head==null||head.next==null){return head;}// 2.创建两个快慢指针,快慢指针都从头节点出发,快指针比慢指针多走一步ListNode slow=head;ListNode fast=head.next;// 3.当快指针不等于null,以及快指针的下一节点不为空,快2慢1while(fast!=null&&fast.next!=null) {slow=slow.next;fast=fast.next.next;}//4.可以确定链表的中点,也就是slow指针的下一个节点,存储变量,平均切分链表。ListNode temp=slow.next;//5.切分链表,划分成左右两个部分,将慢指针的尾部指向nullslow.next=null;//6.左半部分的链表的头节点,右边部分的头节点ListNode right=sortList(temp);ListNode left=sortList(head);
// 7.创建虚拟头节点,以及指向头节点的指针preListNode dummyhead=new ListNode(0);ListNode pre=dummyhead;
// 8.进行归并排序,左链表和右链表都不为空,实现链表的升序排序while(right!=null&&left!=null){if(right.val<= left.val){pre.next=right;right=right.next;}else {pre.next=left;left=left.next;}pre=pre.next;//pre指针后移}// 9.合并链表的时候,如果左右链表不均匀,就把剩余的一个节点直接补齐到链表上if(left==null)//左链表遍历完了,右链表还有元素,此时的指针直接指向右链表的剩余元素{pre.next=right;}else {pre.next=left;}return dummyhead.next;}public static void main(String[] args) {H148 test = new H148();ListNode node4 = new ListNode(3, null);ListNode node3 = new ListNode(1, node4);ListNode node2 = new ListNode(2, node3);ListNode head = new ListNode(4, node2);ListNode res = test.sortList(head);System.out.print("输出排序链表的结果;");while (res != null) {System.out.print(res.val);if (res.next != null) {System.out.print("->");}res = res.next;}}}相关文章:
2025年- H33-Lc141 --148. 排序链表(快慢指针,快指针先出发一步)--Java版
1.题目描述 2.思路 时间空间复杂度分别为 O(nlogn) 和 O(1),根据时间复杂度想到二分法,从而联想到归并排序;对数组做归并排序的空间复杂度为 O(n),分别由新开辟数组 O(n) 和递归函数调用 O(logn) 组成,而根据链表特性…...
【prometheus+Grafana篇】基于Prometheus+Grafana实现Oracle数据库的监控与可视化
💫《博主主页》: 🔎 CSDN主页 🔎 IF Club社区主页 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了…...
板凳-------Mysql cookbook学习 (四)
综合对比与选择建议 维度 PHP Java Python Ruby Perl 学习门槛 低(适合新手) 高(语法复杂) 低(语法简洁) 中(需理解 Rails 理念) 中(特殊语法…...
【D1,2】 贪心算法刷题
文章目录 不同路径 II整数拆分 不同路径 II 初始化的时候不能整列初始化为1,因为如果有障碍物,后面的都不能到达 也不能整列初始化为0,因为状态转移的时候第一行第一列都没有检查,因此不能部分初始化 整数拆分 需要考虑几种情况…...
算法题(150):拼数
审题: 本题需要我们将数组中的数据经过排序,使得他们拼接后得到的数是所有拼接方案中最大的 思路: 方法一:排序贪心 贪心策略1:直接排序 如果我们直接按照数组数据的字典序进行排序,会导致部分情况出错 eg&…...
Denoising Score Matching with Langevin Dynamics
在自然图像等复杂数据集中,真实数据往往集中分布在一个低维流形上,概率密度函数的梯度(即得分函数)难以定义与估计。为缓解该问题,SMLD 提出使用不同强度的高斯噪声对数据进行扰动,扰动后的数据不再集中于低…...
Docker构建 Dify 应用定时任务助手
概述 Dify 定时任务管理工具是一个基于 GitHub Actions 的自动化解决方案,用于实现 Dify Workflow 的定时执行和状态监控。无需再为缺乏定时任务支持而感到困扰,本工具可以帮助设置自动执行任务并获取实时通知,优化你的工作效率。 注意&…...
mongodb管理工具的使用
环境: 远程服务器的操作系统:centOS stream 9; mongoDB version:8.0; 本地电脑 navicat premium 17.2 ; 宝塔上安装了mongoDB 目的:通过本地的navicat链接mongoDB,如何打通链接,分2步: 第一步:宝塔-&…...
第2篇 水滴穿透:IGBT模块的绝对防御体系
引言:从《三体》水滴到功率模块的哲学思考 科幻映照现实:三体探测器"水滴"的绝对光滑表面 → IGBT模块的可靠性设计哲学行业现状痛点:2023年OEM质量报告显示,电控系统23%的故障源自功率模块技术演进悖论:开关频率提升与可靠性保障的永恒博弈 一、基础理论:IGBT…...
LVGL(lv_dropdown下拉列表控件)
文章目录 🔧 一、基本概念🚀 二、创建一个 Dropdown🧰 三、常用函数1. 设置选项2. 获取选项3. 设置当前选中项4. 获取当前选中项索引5. 获取当前选中项文本🎨 四、样式与模式设置方向(最多显示多少项)设置显示模式设置提示文本📞 五、事件回调🧪 六、使用示例📌…...
2.微服务-配置
引入springcloud的pom配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent> <dependencyManagemen…...
python实现pdf转图片(针对每一页)
from pdf2image import convert_from_path import ospdf_file rC:\Users\\Desktop\拆分\产权证.pdf poppler_path rC:\poppler-24.08.0\Library\bin # 这里改成你自己的路径output_dir rC:\Users\\Desktop\拆分\output_images os.makedirs(output_dir, exist_okTrue)image…...
C语言练手磨时间
167. 两数之和 II - 输入有序数组 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <…...
数字图像处理——图像压缩
背景 图像压缩是一种减少图像文件大小的技术,旨在在保持视觉质量的同时降低存储和传输成本。随着数字图像的广泛应用,图像压缩在多个领域如互联网、移动通信、医学影像和卫星图像处理中变得至关重要。 技术总览 当下图像压缩JPEG几乎一统天下ÿ…...
验证器回调中value值没有数据
复杂的响应式,导致回调中value值没有数据,最终还是通过手动判断获取值处理 原理没有搞清楚,为什么回调中value没有值背景:动态增加了form表单的字段,通过for循环处理的。对每个新增的字段还要添加字段验证其。就出现了…...
Python | 需求预测模型
目录 需求预测 1.方法选择 2.颗粒度选择 3.在医药行业的应用 预测模型 1.模型对比 2.Prophet 3.Holt-Winters 需求预测 1.方法选择 方法 适用范围分类移动平均法中小企业、SKU较少的卖家低成本预测方案Excel趋势线预测中小企业、SKU较少的卖家低成本预测方案季节性系数法中小企…...
双指针算法:原理与应用详解
文章目录 一、什么是双指针算法二、双指针算法的适用场景三、双指针的三种常见形式1. 同向移动指针2. 相向移动指针3. 分离指针 四、总结 一、什么是双指针算法 双指针算法(Two Pointers Technique)是一种在数组或链表等线性数据结构中常用的高效算法技…...
打造灵感投掷器:我的「IdeaDice」开发记录
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起源:我只是想“摇”出点灵感 有时候面对写作或者做产品设计,我会卡在「不知道从哪开始…...
2025ICPC邀请赛南昌游记
滚榜时候队伍照片放的人家的闹麻了,手机举了半天 。 最后银牌700小几十罚时,rank60多点。 参赛体验还行,队长是福建人,说感觉这个热度是主场作战哈哈哈哈。空调制冷确实不太行吧。 9s过A是啥,没见过,虽然…...
python重庆旅游系统-旅游攻略
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
MySQL企业版免费开启,强先体验
近期Oracle突然宣布,MySQL企业版面向开发者免费开放下载,这一消息瞬间引爆DBA圈。作为数据库领域的“顶配车型”,企业版长期因高昂授权费让中小团队望而却步,如今免费开放无异于“劳斯莱斯开进菜市场”。 本文将深度拆解企业版的…...
从纸质契约到智能契约:AI如何改写信任规则与商业效率?——从智能合约到监管科技,一场颠覆传统商业逻辑的技术革命
一、传统合同的“低效困境”:耗时、昂贵、风险失控 近年来,全球商业环境加速向数字化转型,但合同管理却成为企业效率的“阿喀琉斯之踵”。据国际商会(International Chamber of Commerce)数据显示,全球企业…...
常见的 HTTP 接口(请求方法)
一:GET 作用:从服务器获取资源(查询数据)。特点: 请求参数通过 URL 传递(如https://api.example.com/users?id123),参数会显示在地址栏中。不修改服务器数据,属于幂等操…...
iOS 抓包实战:从 Charles 到Sniffmaster 的日常工具对比与使用经验
iOS 抓包实战:从 Charles 到抓包大师 Sniffmaster 的日常工具对比与使用经验 抓包这件事,不是高级黑客才要做的。作为一名移动端开发,我几乎每天都要和网络请求打交道,尤其是 HTTPS 请求——加密、重定向、校验证书,各…...
Lodash isEqual 方法源码实现分析
Lodash isEqual 方法源码实现分析 Lodash 的 isEqual 方法用于执行两个值的深度比较,以确定它们是否相等。这个方法能够处理各种 JavaScript 数据类型,包括基本类型、对象、数组、正则表达式、日期对象等,并且能够正确处理循环引用。 1. is…...
Qt Widgets模块功能详细说明,基本控件:QCheckBox(三)
一、基本控件(Widgets) Qt 提供了丰富的基本控件,如按钮、标签、文本框、复选框、单选按钮、列表框、组合框、菜单、工具栏等。 1、QCheckBox 1.1、概述 (用途、状态、继承关系) QCheckBox 是 Qt 框架中的复选框控件,用于表示二…...
第四天的尝试
目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 很抱歉的说一下,我昨天看白色巨塔电视剧,看的入迷了,同时也看出一些道理,学到东西; 但是把昨天的写事情给忘记了,今天…...
【git进阶】git rebase(变基)
git rebase有很多用武之地,我一一道来 合并分支 当多人协作同一个分支时,在提交我们自己版本之前,我们会先用git pull获取远端最新的版本。但是 git pull = git fetch + git mergegit merge是一个非线性的合并操作,大量的merge会造成日志线的分散和交错。实际上 git pu…...
WPS中代码段的识别方法及JS宏实现
在WPS中,文档的基本结构可以通过对象模型来理解: (1)Document对象:表示整个文档 (2)Range对象:表示文档中的一段连续区域,可以是一个字符、一个句子或整个文档 &#…...
小米MUJIA智能音频眼镜来袭
智能眼镜赛道风云再起,小米新力作MIJIA智能音频眼镜2正式亮相,引发市场热议。 这款产品在设计和功能上都有显著提升,为用户带来更舒适便捷的佩戴体验,同时也标志着小米在智能眼镜领域的持续深耕。 轻薄设计,舒适体验 …...
