【leetcode】148. Sort List
时间:2019-03-18
本文章向大家介绍【leetcode】148. Sort List,主要包括【leetcode】148. Sort List使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目如下:
Sort a linked list in O(n log n) time using constant space complexity.
Example 1:
Input: 4->2->1->3 Output: 1->2->3->4Example 2:
Input: -1->5->3->4->0 Output: -1->0->3->4->5
解题思路:因为题目要求时间复杂度是O(nlogn),所以快排应该是合适的方法。原理也和快速排序差不多,我的方法是引入五个指针,分别是small_head,small_tail,large_head,large_tail,equal_tail,首先对list进行遍历,以head.val作为基准,小于head.val的保存到small的list里面,用small_head,small_tail分别指向small list的头结点和尾节点;大于head.val的保存到large list里面,用large_head,large_tail分别指向 list的头结点和尾节点;等于head.val的存入equal list,复用现有的head结点,equal_tail指向equal的尾节点。分组完成后,再对small list和large list做递归,最后把small list的尾节点指向equal list的head,同时把equal list的尾节点指向large list的头结点即可。
代码如下:
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def quick(self,sublist_head): if sublist_head == None: return (None,None) v = sublist_head.val previous = sublist_head current = sublist_head.next little_head = None little_current = None large_head = None large_current = None equal_current = sublist_head while current != None: if current.val < v: if little_head == None: little_current = current little_head = current current = current.next previous.next = current little_current.next = None else: little_current.next = current little_current = little_current.next current = current.next previous.next = current little_current.next = None elif current.val == v: equal_current.next = current previous = current equal_current = equal_current.next current = current.next else: if large_head == None: large_head = current large_current = current current = current.next previous.next = current large_current.next = None else: large_current.next = current large_current = large_current.next current = current.next previous.next = current large_current.next = None small_head,small_tail = self.quick(little_head) big_head,big_tail = self.quick(large_head) if small_head != None: small_tail.next = sublist_head equal_current.next = big_head return (small_head if small_head != None else sublist_head,big_tail if big_tail != None else equal_current) def sortList(self, head): """ :type head: ListNode :rtype: ListNode """ return self.quick(head)[0]
- Docker新手入门实战教程
- Python远程控制模块paramiko遇到的问题及解决记录
- Windows下bat批处理脚本使用telnet批量检测远程端口小记
- WordPress集成PHP缩略图,并开启Nginx缓存的方法
- 分享几个WordPress本地缓存gravatar评论头像的方案
- Linux下的mongodb服务脚本,以备不时之需
- WordPress发布文章主动推送到百度,加快收录保护原创
- Nginx开启fastcgi_cache缓存加速,支持html伪静态页面
- Go-指针、传值与传引用、垃圾回收
- SEO分享:彻底禁止搜索引擎抓取/收录动态页面或指定路径的方法
- Go-defer,panic,recover
- SEO技巧:Shell脚本自动提交网站404死链到搜索引擎
- Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块
- WordPress4.2升级修复补丁:解决大量404请求以及评论表情路径及尺寸异常问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java 15正式发布,腾讯做出了突出贡献
- Mybatis是如何向Spring注册Mapper的
- 打卡群刷题总结0917——买卖股票的最佳时机
- Fiddler对安卓App抓包(逍遥模拟器APP)
- 为何Android 7.0 以上Charles和Fiddler无法抓取HTTPS包?
- 快速上手百度大脑EasyDL专业版·物体检测模型(附代码)
- 极端情况下收缩 Go 进程的线程数
- C++核心准则T.60:最小化模板对上下文的依赖
- C++核心准则T.61:不要过度参数化成员(SCARY)
- C++核心准则T.62:将非依赖类模板成员放入非模板基类中
- C++核心准则T.64:使用特化提供类模板的不同实现
- C++核心准则T.68:在模板中使用{}代替()以避免歧义
- C++核心准则T.69:在模板内部,不要进行不受限制的非成员函数调用
- C++核心准则T.80:不要天真地模板化类继承
- 贪心算法求解:王者荣耀购买点券最优策略