首页/新闻资讯/正文详情

JAVA练习301- 排序链表

发布时间:2026/9/24 19:54:39 来源:云帆数科 栏目:资讯中心
JAVA练习301- 排序链表
题目概览给你链表的头结点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 []输出[]提示链表中节点的数目在范围[0, 5 * 10^4]内-10^5 Node.val 10^5进阶你可以在O(n log n)时间复杂度和常数级空间复杂度下对链表进行排序吗来源148. 排序链表 - 力扣LeetCode解题分析方法快慢指针 归并排序归并排序的时间复杂度是 O(nlogn)该排序的原理是将数组不断进行二分拆分直到单个元素然后从最小的数组两两开始不断合并由于子数组是排好序的因此按照顺序挨个比较大小就可以排序。由于链表没有索引我们可以用快慢指针代替慢指针遍历一个节点快指针遍历两个节点当快指针遍历完成时慢指针刚好到中间节点因此我们可以根据慢节点对链表进行拆分从而进行归并排序。时间复杂度O(nlogn)空间复杂度O(logn)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val val; } * ListNode(int val, ListNode next) { this.val val; this.next next; } * } */ class Solution { public ListNode sortList(ListNode head) { if (head null) { return head; } return sort(head, null); } public ListNode sort(ListNode start, ListNode end) { if (start end || start.next end) { start.next null; return start; } ListNode a start, b start; while(b ! end b.next ! end) { a a.next; b b.next.next; } // print(start); ListNode left sort(start, a);; ListNode right sort(a, end); return merge(left, right); } private void print(ListNode a) { StringBuilder sb new StringBuilder(); while(a ! null) { sb.append(a.val); sb.append(,); a a.next; } System.out.println(sb.toString()); } public ListNode merge(ListNode a, ListNode b) { ListNode res new ListNode(), pre res; while(a ! null b ! null) { if (a.val b.val) { pre.next a; a a.next; } else { pre.next b; b b.next; } pre pre.next; } if (a ! null) { pre.next a; } else if (b ! null) { pre.next b; } return res.next; } }

相关推荐

JAVA练习302- 合并K个排序链表
JAVA练习302- 合并K个排序链表

题目概览 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组… · 2026/9/9 18:07:16

JAVA练习300- 随机链表的复制
JAVA练习300- 随机链表的复制

题目概览 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。… · 2026/9/24 19:54:38

Meta撤回Muse Image功能 隐私争议迫使AI工具下线
Meta撤回Muse Image功能 隐私争议迫使AI工具下线

Meta于2026年7月上旬推出Muse Image功能后,因允许用户引用公开Instagram账号内容生成图像,迅速遭遇大规模反对并在数日内撤回。该功能集成于Meta AI聊天机器人,由Meta Superintelligence Labs开发,是其首款图像生成模型。 事实还… · 2026/9/20 20:38:15

工业监控界面搭建实战:用2D组态平台快速搞定数据绑定与画面交付
工业监控界面搭建实战:用2D组态平台快速搞定数据绑定与画面交付

接到一个空压站集中监控的项目时,甲方只丢过来一张工艺流程图和一份Excel点位表,交货周期压到一周。第一次接触智捷云2D组态工具,说实话我心里也没底,毕竟之前也经历过从零手写前端做工业监控界面的痛苦——项目拖了两个月&#x… · 2026/9/24 19:54:34

OpenCut开源剪辑工具实测:免费无水印+AI剪片,替代剪映?
OpenCut开源剪辑工具实测:免费无水印+AI剪片,替代剪映?

视频剪辑这件事,过去几年一直被几款商业软件牢牢把持着。想剪个片子,要么忍受导出时硕大的水印,要么就得为几个基础功能掏订阅费。我身边不少做自媒体的朋友,每个月在剪辑工具上的开销加起来够吃好几顿火锅了。直到最近&#xff0… · 2026/9/24 19:54:34

Python实现MinHash海量文本去重:从原理到代码实战
Python实现MinHash海量文本去重:从原理到代码实战

做爬虫采集、新闻聚合或者语料库清洗的朋友,大概率都遇到过同一个问题:抓下来的文本重复率能到30%甚至更高。同一篇新闻被不同网站转载,改个标题、换一下首段、插入几条广告,内容主体几乎一模一样。这个时候拿MD5做精确去重根本没… · 2026/9/24 19:54:34

麒麟V10 ARM部署K8S 1.26.15:外部etcd与containerd实战
麒麟V10 ARM部署K8S 1.26.15:外部etcd与containerd实战

简介:这份资源面向需要在国产化信创环境中落地容器编排的运维与云原生工程师,聚焦Kylin V10操作系统搭配ARM架构服务器、采用外部etcd与containerd运行时部署Kubernetes 1.26.15一主多从集群的完整离线安装包。压缩包共41个文件,约645.74MB&a… · 2026/9/24 19:54:34

Claude Code深度解析:AI编程代理如何重塑终端工作流
Claude Code深度解析:AI编程代理如何重塑终端工作流

1. 先聊清楚:Claude Code 到底是什么,以及它凭什么值得关注我第一次注意到Claude Code这个关键词,是在一个技术社群里。有人贴了一段终端截图,里面是一个交互式命令行界面,AI 在逐行分析和修改代码,评论区全… · 2026/9/24 19:54:34

数据库课程设计入门:从四张空表理解表结构与约束设计
数据库课程设计入门:从四张空表理解表结构与约束设计

刚接手数据库课程设计时,任务书写得很简短:SchoolDB数据库,设计四张表,无数据。说实话,第一次看到“无数据”三个字,很多人是愣住的——不让我填数据,那我交什么?后来我才明白&#… · 2026/9/24 19:54:26

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码