LeetCode 148之Sort List的java题解
来源:互联网 发布:西安市软件公寓 编辑:程序博客网 时间:2024/05/01 08:06
转自:http://blog.csdn.net/worldwindjp/article/details/18986737
题目:
Sort a linked list in O(n log n) time using constant space complexity.
解答:
解题报告:就是对一个链表进行归并排序。
主要考察3个知识点,
知识点1:归并排序的整体思想
知识点2:找到一个链表的中间节点的方法
知识点3:合并两个已排好序的链表为一个新的有序链表
归并排序的基本思想是:找到链表的middle节点,然后递归对前半部分和后半部分分别进行归并排序,最后对两个以排好序的链表进行Merge。
代码:
寻找中间节点(用快慢指针):
public static ListNode getMiddleOfList(ListNode head){ListNode slow=head;ListNode fast=head;while(fast.next!=null&&fast.next.next!=null){slow=slow.next;fast=fast.next.next;}return slow;}
合并两个链表:
public static ListNode mergeTwoList(ListNode headA,ListNode headB){ListNode fakeNode=new ListNode(-1);ListNode cur=fakeNode;while(headA!=null&&headB!=null){if(headA.val<=headB.val){cur.next=headA;headA=headA.next;}else {cur.next=headB;headB=headB.next;}cur=cur.next;}cur.next=headA==null?headB:headA;return fakeNode.next;}
归并排序主函数:
public static ListNode sortList(ListNode head) { if(head==null||head.next==null)//递归出口 当只有一个节点时就不再递归 return head; ListNode middle=getMiddleOfList(head); ListNode next=middle.next; middle.next=null;//把两个链表断开分为左边(包括middle)一半和右边一半 return mergeTwoList(sortList(head), sortList(next)); }
0 0
- LeetCode 148之Sort List的java题解
- leetcode题解Java | 148. Sort List
- LeetCode题解:Sort List
- LeetCode题解:Insertion Sort List
- leetcode之Sort List
- leetcode之Sort List
- leetcode之Sort List
- LeetCode之Sort List
- leetcode之Sort List
- Leetcode之Sort List
- leetcode之sort-list
- [Leetcode] Sort List (Java)
- LeetCode:Sort List (Java)
- Leetcode: Sort List (Java)
- Sort List leetcode java
- leetcode题解-链表排序算法 147. Insertion Sort List && 148 . Sort List
- LeetCode Insertion Sort List 最新题解
- LeetCode 题解(41): Insertion Sort List
- 技术大牛谈HTML5设计原理(转载)-…
- 次短路poj 3255
- AE实现批量修改SHP文件坐标系
- AE实现批量修改SHP文件坐标系
- 记录一个低级错误
- LeetCode 148之Sort List的java题解
- 记录一个纠结的问题
- 协议解析笔记
- android开源框架
- OpenFlow Channel
- C#之Hashtable
- oracle系统包——dbms_job用法(oracle定时任务)
- C#之Hashtable
- AE开发涉及相关概念