LeetCode Sort List(单链表归并排序)
来源:互联网 发布:如何ping ip 和端口号 编辑:程序博客网 时间:2024/05/17 07:30
题意:给出一个单链表,将其排序,要求时间复杂度O(nlgn)
思路:用归并排序,取链表的一半,在取一半时,不用先计算总结点个数,一个每次走两步,一个每次走一步,当走的快的结束是,慢的已经到总结点的一半了
代码如下:
class Solution{ private ListNode mergeListNode(ListNode l1, ListNode l2) { if (null == l1) return l2; else if (null == l2) return l1; ListNode p1 = l1, p2 = l2; ListNode ans = null, tail = null; while (l1 != null && l2 != null) { if (l1.val < l2.val) { if (tail == null) { ans = tail = l1; } else { tail.next = l1; tail = tail.next; } l1 = l1.next; } else { if (null == tail) { ans = tail = l2; } else { tail.next = l2; tail = tail.next; } l2 = l2.next; } } if (l1 != null) tail.next = l1; else if (l2 != null) tail.next = l2; return ans; } public ListNode sortList(ListNode head) { if (null == head || null == head.next) return head; ListNode fast = head.next, slow = head; while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } ListNode p = slow.next; slow.next = null; return mergeListNode(sortList(head), sortList(p)); }}
0 0
- Leetcode:Sort List 对单链表归并排序
- 【leetcode 单链表归并排序】Sort List
- 【LeetCode】 sort list 单链表的归并排序
- LeetCode Sort List(单链表归并排序)
- sort list leetcode (归并排序)
- Leetcode Sort List 链表归并排序
- [leetcode] 134 Sort List (链表 & 归并排序)
- Leetcode: Sort List - 归并
- 归并排序---Sort List
- leetcode:Sort List(链表的归并排序)
- [C++]LeetCode: 125 Sort List (归并排序链表)
- LeetCode Sort List 链表的归并排序
- leetcode:Sort List 使用归并排序的解决思路
- LeetCode 148. Sort List 解题报告(归并排序小结)
- leetcode 148. Sort List 链表归并排序
- 148. Sort List--单链表自底向上归并排序
- Leetcode 148 Sort List 单链表排序
- LeetCode Insertion Sort List(单链表插入排序)
- Android下写一个永远不会被KILL掉的进程/服务
- POJ 1611 The Suspects (并查集)
- Ubuntu 下安装和配置 Apache Maven
- 《App后台开发运维和架构实践》勘误
- Java基础_debug
- LeetCode Sort List(单链表归并排序)
- onethink打开调试面板也就是页面trace
- HDU 1059 Dividing
- June 11th 模拟赛C T2 Cowski Solution
- java android 面试题汇总
- java核心机制之GC
- Openvas使用
- 关于Android平台显示隐藏软键盘输入法的方法总结
- 程序员面试金典题解 原串翻转