您的位置:首页
LeetCode 148 Sort List
2017-06-14 16:40
274 查看
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); } }
相关文章推荐
- 【LEETCODE】148- Sort List [Python]
- LeetCode 148 Sort List
- leetcode解题之148. Sort List Java版(对链表排序)
- leetcode_c++:链表:Sort List(148)
- 【leetcode】【单链表】【148】Sort List
- LeetCode 148 Sort List
- LeetCode148—Sort List
- LeetCode 148: SortList, 206:Reverse linked list
- [leetcode-148]Sort List(c)
- leetcode 148 sortlist
- 【leetcode】【单链表】【148】Sort List
- leetcode-148 Sort List
- Leetcode148:Sort List
- [LeetCode#148]Sort List
- 【leetcode 148 Sort List】
- [LeetCode]题解(python):148-Sort List
- Leetcode 148 Sort List
- leetcode148 Sort List
- LeetCode: Sort List [148]
- LeetCode(148)Sort List