148. Sort List (java 给单链表排序)
题目:Sort a linked list in O(n log n) time using constant space complexity.
分析:给单链表排序,要求时间复杂度是O(nlogn),空间复杂度是O(1)。时间复杂度为O(nlogn)的排序算法有快速排序和归并排序,
但是,对于单链表来说,进行元素之间的交换比较复杂,但是连接两个有序链表相对简单,因此这里采用归并排序的思路。
编码:
public ListNode sortList(ListNode head) {if(head == null || head.next == null)return head;//找到链表的中间节点,一快一慢两个指针ListNode fast = head;ListNode slow = head;ListNode pre = null; //记录第一部分的最后一个节点//将单链表划分为两部分while(fast != null && fast.next != null){fast = fast.next.next;pre = slow;slow = slow.next;}//将两部分分割开if(pre != null)pre.next = null;//分别对两部分递归排序ListNode l1 = sortList(head);ListNode l2 = sortList(slow);return merge(l1,l2); //归并 }//归并两个有序序列public ListNode merge(ListNode l1,ListNode l2){if(l1 == null)return l2;if(l2 == null)return l1;ListNode l = new ListNode(-1);ListNode newHead = l;while(l1 != null && l2 != null){ if(l1.val < l2.val){newHead.next = l1; //这里利用单链表的性质,不使用额外的空间,使得空间复杂度为O(1)l1 = l1.next;newHead = newHead.next;} else {newHead.next = l2;l2 = l2.next;newHead = newHead.next;}}if(l1 != null)newHead.next = l1;if(l2 != null)newHead.next = l2;return l.next;}
转载于:https://www.cnblogs.com/mydesky2012/p/5768780.html
148. Sort List (java 给单链表排序)相关推荐
- 单链表的应用--对单链表排序
对单链表进行排序,利用前文写好的链表的框架,在链表类中补充Sort方法. 对单链表排序 一.问题分析 二.代码分析 1.链表类LinkList 2.链表方法Sort 三.测试代码 1.主函数 2. ...
- java实现单链表常见操作,java面试题,java初级笔试题
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...
- 面试题精选:单链表排序也能玩出花来
今天国庆节,祝大家中秋节快乐,顺便给大家拜个早年[狗头].不过最近还在准备面试的同学们不要浪太狠,还是要好好学习的鸭. 单链表的排序在数据结构类的面试题中简直是集大成者,什么排序.链表.链表删除.添加 ...
- 单链表排序----快排 归并排序
单链表排序----快排 & 归并排序 原文:http://blog.csdn.net/u012658346/article/details/51141288 题目描述: 给定一个乱序的单链表 ...
- 单链表排序之直接插入排序
****单链表排序之直接插入排序**** /*前段时间刚学会几种排序方法,最近学习了单链表,就用来试试,本篇链表的排序方法<一>讲述的是单链表的直接插入排序:(注意:请仔细看准节点结构体的 ...
- python单链表排序_单链表排序之选择排序
单链表排序是单链表的常见编程任务之一,也是面试中经常出现的题目.单链表排序的关键是交换算法,需要额外考虑.选择排序是比较直观的排序算法之一,这里就使用选择排序实现单链表的排序. C实现代码如下: Li ...
- 牛客 - 单链表排序
单链表排序 **BM12** **单链表的排序** 链接 问题描述 代码 BM12 单链表的排序 链接 单链表的排序_牛客题霸_牛客网 (nowcoder.com) 问题描述 给定一个节点数为n的无序 ...
- 单链表排序(交换节点)
单链表排序(移动节点) 单链表排序利用了选择排序的方式: 创建一个单链表结构体 typedef int data_t;//为了能适应存储其他类型数据,可以将int换成其他数据类型而不通用一个一个更改程 ...
- java单链表通讯录_[Java教程]用java实现单链表(菜鸟出征)
[Java教程]用java实现单链表(菜鸟出征) 0 2016-03-24 14:00:06 package code;class Node{ Node next; int data; public ...
- java实现单链表常见操作
一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...
最新文章
- Java项目:酒店管理系统(java+Springboot+Mybatis+Beetl+Layui)
- 【编码】-小Ho的防护盾-2016.08.14
- React Native 集成
- python学习音频-Python学习笔记--音频处理
- 浅谈街霸的帧数据 (一):frame data
- 得胜php100怎么样,优缺点评测得胜Q麦评价如何?怎么样呢?老司机透漏
- ai中如何插入签名_技巧不求人167期 Excel如何打印到1页纸的2种方法 Excel如何插入手写签名...
- Pytorch MNIST直接离线加载二进制文件到pytorch
- SqlSever分页查询,仅扫描一次表
- (25)System Verilog类外约束类内变量
- adb如何使用javac编译java程序并且运行
- 全面对比 C C++ Java Python
- 【区块链开发入门】(二) 以太坊的编程接口
- 快冲!淘宝无货源副业,傻瓜式操作,日赚300-500元!!
- linux中分号转义字符,Linux职场技术篇-Linux shell中元字符、转义符、通配符的使用方法...
- prisma orm_如何使用Node.js和Prisma构建GraphQL服务器
- 思科模拟器(cisco) 交换机综合实践(笔记篇)
- Janus之自问自答
- 测试学习——性能测试(一)
- mybatic动态SQL及结果处理