排序链表的三种写法

题目链接:https://leetcode.cn/problems/sort-list/?envType=study-plan-v2&envId=top-100-liked

在这里插入图片描述
第一种,插入排序,会超时

class Solution {public ListNode sortList(ListNode head) {//插入排序,用较为简单的方式解决ListNode dummyNode = new ListNode(0,null);ListNode p = head;while(p!=null){ListNode temp = p;p=p.next;//将temp插入到链表当中ListNode q = dummyNode;int flag = 0;while(q.next!=null){if(q.next.val>=temp.val){ListNode t = q.next;q.next = temp;temp.next = t;flag= 1;break;}q = q.next;}//说明插在最后一个if(flag==0){q.next = temp;temp.next = null;}}return dummyNode.next;}
}

第二种,推荐面试直接写,堆排序,借助优先队列,能5分钟秒了

/*** 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) {//推荐使用优先队列PriorityQueue<ListNode> queue = new PriorityQueue<>(new Comparator<>(){public int compare(ListNode a ,ListNode b){return a.val-b.val;}});ListNode p = head;while(p!=null){queue.offer(p);p=p.next;}ListNode dummy = new ListNode(0);ListNode q = dummy;while(queue.isEmpty()==false){ListNode node = queue.poll();q.next = node;q = q.next;q.next = null;}return dummy.next;}
}

第三种,归并排序,主要就是分为归并和合并两部分。合并很简单。拆分时候,通过快慢指针拆出来两个链表头。

class Solution {public ListNode sortList(ListNode head) {if(head==null||head.next==null)return head;ListNode slow = head;//这里一定一定要slow和fast分开//不然 4 2 会出现,head一直是4,newHead一直是空的情况ListNode fast = head.next;while(fast!=null&&fast.next!=null){fast = fast.next.next;slow = slow.next;}ListNode newHead = slow.next;slow.next = null;return merge(sortList(head),sortList(newHead));}public ListNode merge(ListNode l1,ListNode l2){ListNode p = l1;ListNode q = l2;ListNode dummy = new ListNode(0);ListNode t = dummy;while(p!=null&&q!=null){if(p.val<q.val){t.next = p;p=p.next;}else{t.next = q;q=q.next;}t=t.next;}t.next = p==null?q:p;return dummy.next;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/540610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python创建虚拟环境-Anaconda安装配置和使用

Anaconda提供了一个名为conda的包管理工具&#xff0c;可以方便地创建、管理和分享Python环境。用户可以根据自己的需要创建不同的环境&#xff0c;每个环境都可以拥有自己的Python版本、库和依赖项&#xff0c;这样就可以避免因为不同项目之间的依赖关系而导致的冲突问题。 一…

MS08-067 漏洞利用与安全加固

文章目录 环境说明1 MS08_067 简介2 MS08_067 复现过程3 MS08_067 安全加固 环境说明 渗透机操作系统&#xff1a;2024.1漏洞复现操作系统: Windows XP Professional with Service Pack 2- VL (English)安全加固复现操作系统&#xff1a;Windows XP Professional with Service …

【RPG Maker MV 仿新仙剑 战斗场景UI (三)】

RPG Maker MV 仿新仙剑 战斗场景UI 三 二级战斗指令菜单RMMV效果代码效果 仿仙剑UI代码效果 二级战斗指令菜单 仙剑1中二级战斗的菜单内容如下&#xff1a;物品、防御、围攻、逃跑、状态这五项。 现在来完成金玉其外的UI部分&#xff0c;内核具体的功能需要后期进行填充了&…

slf4j 打印当前类和方法

spring initializr 自动包含依赖&#xff0c;也可以在 pom.xml 文件中添加 slf4j 的依赖&#xff0c;指定版本 例如我这边默认版本是 1.7.36 通过添加依赖修改版本为 1.7.32 <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</arti…

Java微服务轻松部署服务器

我们在日常开发微服务之后需要再服务器上面部署&#xff0c;那么如何进行部署呢 1.首先需要对多个服务进行打成jar包放到服务器上 微服务一般maven文件有一个父类的pom.xml&#xff0c;需要将pom.xml删除在子类加上&#xff0c;不然会找不到主类 就是repackage这个配置&#…

Vue首屏优化方案

在Vue项目中&#xff0c;引入到工程中的所有js、css文件&#xff0c;编译时都会被打包进vendor.js&#xff0c;浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多&#xff0c;那么vendor.js文件体积将会相当的大&#xff0c;影响首屏的体验。可以看个例子&#xff1a;…

uniapp无感登录封装

全局请求封装 https://blog.csdn.net/qq_42618566/article/details/109308690 无感登录封装 import {http} from "./index.js" let requestsQueue []; // 请求队列// 记录请求队列 export function recordRequests(path, params, loading, method) {requestsQueu…

vsCode html部分代码换行太多

使用vscode格式化文档的时候会出现这种情况 文件 -> 首选项 -> 设置 -> 搜索vetur -> 在setting.json中编辑。添加一下代码&#xff1a; "vetur.format.defaultFormatter.html": "js-beautify-html", "vetur.format.defaultFormatter.j…

音视频学习笔记——C++智能指针

C智能指针介绍 智能指针主要用于管理在堆上分配的内存&#xff0c;它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后&#xff0c;会在析构函数中释放掉申请的内存&#xff0c;从而防止内存泄漏。C 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法&#…

电梯机房秀

每天乘坐电梯&#xff0c;您见过电梯的机房吗&#xff1f;来&#xff0c;跟着小伍去看看吧。Lets go&#xff01; 电梯还能节能呢&#xff0c;您知道么&#xff1f;正好&#xff0c;小伍一块带您看看电梯节能装置(●◡●) 目前电梯节能装置已广泛应用于三菱、富士、日立、奥的斯…

IBM:《2024年消费者调研:无处不在的人工智能彻底变革零售业》

1月17日&#xff0c;IBM商业价值研究院最近发布了第三份两年一度的消费者调研报告。 这项名为《无处不在的人工智能彻底改变零售业&#xff1a;客户不会等待》的报告&#xff0c;对包含中国在内的全球近20000名消费者进行了调研&#xff0c;相关结果反映了消费者对零售体验的普…

(黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_07&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小…