LeetCode 148 Sort List
2014-10-22 11:44
344 查看
Sort a linked list in O(n log n) time using constant space complexity.
思路:要想时间复杂度达到O(n log n)
,那么有两种,一种是合并排序,另一种是快速排序,而要想空间复杂度为常数,那么只能使用递归,本人使用的是递归的合并排序,代码如下:
思路:要想时间复杂度达到O(n log n)
,那么有两种,一种是合并排序,另一种是快速排序,而要想空间复杂度为常数,那么只能使用递归,本人使用的是递归的合并排序,代码如下:
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { private ListNode merge(ListNode l1, ListNode l2) { if(l1==null&&l2==null) return null; ListNode head=new ListNode (-1); ListNode pNode=head; while(l1!=null||l2!=null){ if(l1==null) { pNode.next=l2; return head.next; } if(l2==null){ pNode.next=l1; return head.next; } if(l1.val>l2.val){ pNode.next=l2; l2=l2.next; }else { pNode.next=l1; l1=l1.next; } pNode=pNode.next; } return head.next; } private ListNode mergeSort(ListNode head){ if(head==null||head.next==null) //just one element return head; ListNode p=head, q=head, pre=null; while(q!=null&&q.next!=null){ q=q.next.next; pre=p; p=p.next; //divide into two parts } pre.next=null; ListNode lhalf=mergeSort(head); ListNode rhalf=mergeSort(p); //recursive return merge(lhalf, rhalf); //merge } public ListNode sortList(ListNode head) { return mergeSort( head); } }
相关文章推荐
- Sort List - LeetCode 148
- leetcode148 Sort List
- [LeetCode#148]Sort List
- LeetCode: Sort List [148]
- [Leetcode]#148 Sort List
- leetcode_148 Sort List
- Leetcode:148_Sort List | O(nlogn)链表排序 | Medium
- leetcode题解-链表排序算法 147. Insertion Sort List && 148 . Sort List
- leetcode(148):Sort List
- Java for LeetCode 148 Sort List
- Leetcode[148]-Sort List
- [LeetCode 148] Sort List Solution
- leetcode148 sort list
- Leetcode 148 Sort List 单链表排序
- Leetcode#148 Sort List
- leetCode刷题归纳-List(148 Sort List)
- LeetCode 148 Sort List
- LeetCode 148: Sort List
- leetcode 148: Sort List
- leetcode[148]Sort List