【LeetCode】148. Sort List

Sort List

Sort a linked list in O(n log n) time using constant space complexity.

 

要求时间复杂度为O(nlogn),那么不能用quickSort了(最坏O(n^2)),所以使用mergeSort.

通常写排序算法都是基于数组的,这题要求基于链表。所以需要自己设计函数获得middle元素,从而进行切分。

参考Linked List Cycle II中的快慢指针思想,从而可以获得middle元素。

 

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* sortList(ListNode* head) {if(head == NULL || head->next == NULL)return head;ListNode* head1 = head;ListNode* head2 = getMid(head);head1 = sortList(head1);head2 = sortList(head2);return merge(head1, head2);}ListNode* merge(ListNode* head1, ListNode* head2){ListNode* newhead = new ListNode(-1);ListNode* newtail = newhead;while(head1 != NULL && head2 != NULL){if(head1->val <= head2->val){newtail->next = head1;head1 = head1->next;}else{newtail->next = head2;head2 = head2->next;}newtail = newtail->next;newtail->next = NULL;}if(head1 != NULL)newtail->next = head1;if(head2 != NULL)newtail->next = head2;return newhead->next;}ListNode* getMid(ListNode* head){//guaranteed that at least two nodesListNode* fast = head->next;ListNode* slow = head->next;ListNode* prev = head;while(true){if(fast != NULL)fast = fast->next;elsebreak;if(fast != NULL)fast = fast->next;elsebreak;prev = slow;slow = slow->next;}prev->next = NULL;  // cutreturn slow;}
};

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

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

相关文章

WordPress网站搬家教程(根目录程序+ MySQL数据库)

WordPress博客网站怎么搬家到新的服务器上&#xff1f;WordPress搬家无非是两点&#xff0c;即WP程序文件和数据库&#xff0c;具体什么系统不用考虑&#xff1a; 3分钟详解WordPress搬家教程 本文新手站长网关于WordPress搬家教程是帮大家缕清思路&#xff08;参考&#xff1…

Redis持久化的几种方式——RDB深入解析

点击上方“Java中文社群”&#xff0c;选择“设为星标”终身学习者&#xff0c;以编程为乐&#xff01;Redis 的读写都是在内存中&#xff0c;所以它的性能较高&#xff0c;但在内存中的数据会随着服务器的重启而丢失&#xff0c;为了保证数据不丢失&#xff0c;我们需要将内存…

配置Debian11服务器允许root用户远程SSH登录

全新安装系统后&#xff0c;默认情况下将禁用Debian Linux上的root登录。当您尝试以root用户身份登录Debian11 Linux服务器时&#xff0c;访问将被拒绝。要在Debian Linux系统上为root用户启用SSH登录&#xff0c;您需要首先配置SSH服务器。 0.首先安装SSH 注意&#xff1a;如…

带你深入浅出的分析 HashTable 源码

Hashtable 一个元老级的集合类&#xff0c;早在 JDK 1.0 就诞生了&#xff0c;今天小编想和大家一起来揭开它的面纱&#xff01;01、摘要在集合系列的第一章&#xff0c;咱们了解到&#xff0c;Map 的实现类有 HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、…

Debian11服务器系统默认不存在sudo命令的解决办法

1.切换到root用户&#xff0c;安装vim&#xff0c;修改镜像源文件 apt-get install vim vim /etc/apt/sources.list注释掉原有的内容&#xff0c;添加如下阿里云的镜像源 deb http://mirrors.aliyun.com/debian/ bullseye main contrib deb-src http://mirrors.aliyun.com/…

Redis使用不当导致应用卡死

作者&#xff1a;小木来源&#xff1a;http://rrd.me/ezfTj首先说下问题现象&#xff1a;内网sandbox环境API持续1周出现应用卡死&#xff0c;所有api无响应现象刚开始当测试抱怨环境响应慢的时候 &#xff0c;我们重启一下应用&#xff0c;应用恢复正常&#xff0c;于是没做处…

阿里巴巴Linux开源镜像站 华为Linux开源镜像站 Linux宝塔面板

学习Linux系统和用Linux系统作服务器时&#xff0c;推荐Linux从Linux系统开源镜像站下载&#xff0c;国内源下载速度快&#xff0c;Linux系统可选择方案多&#xff01; 1.阿里巴巴开源镜像站&#xff1a; https://developer.aliyun.com/mirror/ 2.华为开源镜像站&#xff1a; …

阿里Java开发手册——如何优化数据库?

作者&#xff1a;杨冠宝/高海慧来自&#xff1a;码出高效 Java 开发手册数据库作为服务器端最为最为昂贵的资源之一&#xff0c;如果使用不当常常会导致系统卡顿或系统崩溃&#xff0c;那如何来优化数据库呢&#xff1f;下面来看阿里巴巴《Java开发手册》给出的优化方案。1 建立…

虚拟机VMware Workstation安装Linux服务器Debian11系统详细教程

虚拟机VMware Workstation安装Linux服务器Debian11系统详细教程如下&#xff1a; 准备好&#xff1a; 1.安装好虚拟机VMware Workstation 2.从Linux开源镜像下载的debian11镜像系统 从创建新的虚拟机开始 安装完系统重启进入系统&#xff0c;首先要做的是更新为阿里云的…

借力 Docker ,三分钟搞定 MySQL 主从复制!

hello 各位小伙伴大家好&#xff0c;今年 5 月份的时候&#xff0c;松哥和大家聊过如何搭建 MySQL 主从复制&#xff1a;提高性能&#xff0c;MySQL 读写分离环境搭建(一)提高性能&#xff0c;MySQL 读写分离环境搭建(二)不过很多小伙伴反映在 Linux 中安装 MySQL 比较费劲&…

阿里云服务器Debian11系统安装Linux宝塔面板 搭建WordPress个人博客

阿里云服务器可以使用Debian11镜像系统&#xff0c;在安装Linux宝塔面板&#xff0c;配置LNMP(LinuxNginxMySQLPHP&#xff09;后&#xff0c;再搭建WordPress个人博客。 一、安装Linux宝塔面板&#xff1a; https://www.bt.cn/ 复制debian安装linux宝塔面板命令&#xff0c…

面试官:聊一下你对MySQL索引的理解?

作者&#xff1a;浪人来源&#xff1a;http://t.cn/AiKmcEefMySQL索引&#xff1f;这玩意儿还能简单聊&#xff1f;明显是在挖坑&#xff0c;幸好老夫早有准备&#xff0c;切听我一一道来。 一、索引是什么?索引是帮助MySQL高效获取数据的数据结构。二、索引能干什么?索引非常…

Linux新建用户可以在shell中切换到该用户也能登录到图形桌面

解决使用useradd testname&#xff0c;passwd testname命令确实创建了一个用户&#xff0c;可以在shell中切换到该用户。但不能登录到图形桌面的问题&#xff01; 通过下面方法可以在Linux中新建用户&#xff0c;并创建用户主目录&#xff0c;也能登录到图形桌面 1.普通用户先…

这样写Java,同事直呼666

作者&#xff1a;涛姐涛哥来源&#xff1a;cnblogs.com/taojietaoge/p/11575376.html一、MyBatis 不要写 11当遇到多个查询条件&#xff0c;使用where 11 可以很方便的解决我们的问题&#xff0c;但是这样很可能会造成非常大的性能损失&#xff0c;因为添加了 “where 11 ”的过…

Lync Server 2010 安装部署系列三:添加DNS记录

为了让客户端能够自动登录系统&#xff0c;我们需要在DNS服务器上设置创建相关的SRV记录&#xff0c;首先在DNS服务器上创建一条A记录pool.Contoso.com对应IP地址为192.168.1.11&#xff0c;然后创建一条SRV记录对应刚才创建的A记录&#xff0c;服务的内容为_sipinternaltls&am…

Linux系统下MySQL导出数据库和导入数据库的命令

一、MySQL导出数据库用mysqldump命令 注意mysql的安装路径&#xff0c;即此命令的路径&#xff0c;如果你只要查询mysql的运行文件所在地址&#xff0c;直接用下面的命令就可以了&#xff0c;再切换到mysql的运行文件的路径 which mysqlcd /usr/bin/1、导出数据和表结构 命令格…

工作中 99% 会用到的 Git 命令

作者&#xff1a;命中水来源&#xff1a;https://www.cxiansheng.cn/daily/4901.分支操作git branch 创建分支git branch -b 创建并切换到新建的分支上git checkout 切换分支git branch 查看分支列表git branch -v 查看所有分支的最后一次操作git branch -vv 查看当前分支git b…

JSP tomcat 更新不生效

2019独角兽企业重金招聘Python工程师标准>>> 今天遇到一问题&#xff0c;更改好的jsp部署到tomcat后&#xff0c;无论如何页面也不生效&#xff0c;最后才知道是tomcat的work目录没有清的原因&#xff0c;借此机会也特地看了下work目录的作用以及原理&#xff0c;做…

Win10专业版系统Docker安装、配置和使用详细教程

一、win10专业版系统首先需要开启硬件虚拟化及Hyper-V功能&#xff0c;才能进行Docker for Windows软件安装。 如何开启硬件虚拟化&#xff0c;自行百度。可在任务栏中查看虚拟化是否开启。 win10系统&#xff0c;打开控制面板-“应用”-“程序和功能”&#xff0c;开启Hyper…

框架开发之Java注解的妙用

作者&#xff1a;locality来源&#xff1a;https://www.jianshu.com/p/b560b30726d4如果你还不会使用注解&#xff0c;你肯定不好意思对别人说你学过Spring&#xff0c;你学过Mybatis&#xff0c;因为它们用了大量的注解。可见注解在开发领域已经使用的非常广泛了。注解的好处&…