[LeetCode 148]Sort List
来源:互联网 发布:淘宝空间协议在哪里 编辑:程序博客网 时间:2024/04/30 11:44
题目链接:sort-list
/** * Sort a linked list in O(n log n) time using constant space complexity. * */public class SortList {public class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}//解法一 : 归并法//15 / 15 test cases passed.//Status: Accepted//Runtime: 310 ms//Submitted: 0 minutes ago//时间复杂度O(n * log(n)) 空间复杂度 O(1) public ListNode sortList(ListNode head) { if(head == null || head.next == null) { return head; } ListNode slow = head; ListNode fast = head; //找到链表的中点位置 while(fast.next != null && fast.next.next != null) { fast = fast.next.next; slow = slow.next; } fast = slow.next; //断开链表 slow.next = null; ListNode list1 = sortList(head); ListNode list2 = sortList(fast); return mergeList(list1, list2); } //合并两链表 public ListNode mergeList(ListNode head1, ListNode head2) { ListNode head = new ListNode(-1); ListNode last = head; while(head1 != null && head2 != null) { if(head1.val <= head2.val) { last.next = head1; head1 = head1.next; } else { last.next = head1; head1 = head1.next;} last = last.next; } if(head1 != null) last.next = head1; if(head2 != null) last.next = head2; return head.next; }//解法二//15 / 15 test cases passed.//Status: Accepted//Runtime: 709 ms //Submitted: 0 minutes ago// 对排序好的链表设置一个中点指针,如果待排的节点大于中点指针的值,则从中点开始寻找插入点,否则从表头开始查找 //其实也没降低时间复杂度 和暴力插排一样 仍为O(n*n) 空间复杂度 O(1) public ListNode sortList1(ListNode head) { ListNode preHead = new ListNode(-1); ListNode last = null; ListNode cur = null; int preNum = 0, postNum = 0; while(head != null) { ListNode headNext = head.next; if(last != null && last.val <= head.val) { postNum ++; cur = last; } else { preNum ++; cur = preHead;} while(cur.next != null) {if(cur.next.val >= head.val) {break;}cur = cur.next;}if(last == null) {last = head;} ListNode curNext = cur.next;cur.next = head;cur.next.next = curNext; head = headNext; if(postNum > preNum) {last = last.next;} } return preHead.next; }public static void main(String[] args) {// TODO Auto-generated method stub}}
0 0
- LeetCode(148)Sort List
- LeetCode: Sort List [148]
- LeetCode 148 Sort List
- [leetcode 148] Sort List
- [LeetCode 148]Sort List
- leetcode-148 Sort List
- Leetcode 148 Sort List
- LeetCode 148: Sort List
- 【leetcode 148 Sort List】
- Leetcode[148]-Sort List
- Sort List - LeetCode 148
- Leetcode# 148 Sort List
- Leetcode # 148 Sort List
- LeetCode(148) Sort List
- leetcode 148: Sort List
- [Leetcode]#148 Sort List
- 148 Sort List [Leetcode]
- LeetCode 148 Sort List
- Ubuntu 12.04 MTK环境配置说明
- JDK环境
- 阴影效果 ShadowLayout 布局实现(让控件实现立体效果)
- 我奋斗了18年,不是为了和你一起喝咖啡
- C#第一次试验
- [LeetCode 148]Sort List
- 语言函数可变长参数
- 养成追求优秀的习惯
- 枚举类
- 开源 java CMS - FreeCMS2.3 评论管理
- .NET下的一些AOP框架介绍
- c/c++ 处理字符串时要注意的问题
- Android资源代码 源码 整理 Github开源项目下载地址
- CCF简单模拟题一水