JAVA练习301- 排序链表

发布时间:2026/9/28 4:22:27

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个排序链表

2026/8/23 0:01:58

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

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

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

2026/8/23 0:01:59

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

电子证件照片制作全教程:手机免费操作、微信支付宝流程、标准尺寸底色大全

电子证件照片制作全教程:手机免费操作、微信支付宝流程、标准尺寸底色大全

2026/8/23 0:01:59

2026年各类线上报名、证件办理、入职存档、签证申请等场景,均需要合规的电子证件照。很多人常因尺寸不符、底色错误、画质模糊、文件大小超标导致上传审核失败。本文整理全套手机免费制作方法,涵盖微信、支付宝主流操作流程,明确通用标准尺寸…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/26 13:57:22

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…