Sort List leetcode java
2024-09-22 05:49:18
题目:
Sort a linked list in O(n log n) time using constant space complexity.
题解:
考虑到要求用O(nlogn)的时间复杂度和constant space complexity来sort list,自然而然想到了merge sort方法。同时我们还已经做过了merge k sorted list和merge 2 sorted list。这样这个问题就比较容易了。
不过这道题要找linkedlist中点,那当然就要用最经典的faster和slower方法,faster速度是slower的两倍,当faster到链尾时,slower就是中点,slower的next是下一半的开始点。
解决了这些问题,题目就很容易解出了。
代码如下:
1 public ListNode sortList(ListNode head) {
2 if(head == null|| head.next == null)
3 return head;
4 ListNode slow = head, fast = head, firsthalf = head;
5 while(fast.next!=null&&fast.next.next!=null){
6 slow = slow.next;
7 fast = fast.next.next;
8 }
9 ListNode secondhalf = slow.next;
slow.next = null;
ListNode leftlist = null, rightlist =null;
if(firsthalf!=secondhalf){
leftlist = sortList(firsthalf);
rightlist = sortList(secondhalf);
}
return mergeTwoLists(leftlist, rightlist);
}
public ListNode mergeTwoLists(ListNode leftlist, ListNode rightlist){
if(rightlist == null)
return leftlist;
if(leftlist == null)
return rightlist;
ListNode fakehead = new ListNode(-1);
ListNode ptr = fakehead;
while(rightlist!=null&&leftlist!=null){
if(rightlist.val<leftlist.val){
ptr.next = rightlist;
ptr = ptr.next;
rightlist = rightlist.next;
}else{
ptr.next = leftlist;
ptr = ptr.next;
leftlist = leftlist.next;
}
}
if(rightlist!=null)
ptr.next = rightlist;
if(leftlist!=null)
ptr.next = leftlist;
return fakehead.next;
}
最新文章
- JAVA学习笔记之static——2016.3.10
- Qt之添加QLabel的点击事件
- Python——函数中的关键字参数
- MAC OS 系统使用心得
- Gulp-前端进阶A-2
- [ZZ] KlayGE 游戏引擎 之 Order Independent Transparency(OIT)
- Spring boot 1.3.5 RELEASE 官方文档中文翻译--Part2:新手入门
- JZ2440开发笔记(2)——minicom的安装和配置使用【转】
- 四句话总结JavaScript作用域
- CM3存储器系统
- linux命令行模式下实现代理上网(转)
- yum安装memcache,mongo扩展以及python的mysql模块安装
- C#版本websocket及时通信协议实现
- Google浏览器设置搜索打开新的标签页
- .net core web api 与httpclient发送和接收文件及数据
- Notification详解(含工具类)
- 在quartz的Job中获得Spring的WebApplicationContext或ServletContext
- docker官方windows安装
- webpack 安装以及使用
- UNIX网络编程读书笔记:recvmsg和sendmsg函数
热门文章
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
- ssm框架常见问题
- python抓包模块
- [Arc079F] Namori Grundy
- 利用Pastezort渗透win7
- OpenGL和GLSL版本更迭
- [Visual Studio] VS2012调试时很慢的解决方案
- Qt线程外使用Sleep
- HDU 3487 Play with Chain (splay tree)
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现