45.Sort List(链表排序)
Posted yjxyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了45.Sort List(链表排序)相关的知识,希望对你有一定的参考价值。
Level:
??Medium
题目描述:
Sort a linked list in O(n log n) time using constant space complexity.
Example 1:
Input: 4->2->1->3
Output: 1->2->3->4
Example 2:
Input: -1->5->3->4->0
Output: -1->0->3->4->5
思路分析:
??对链表进行归并排序,时间复杂为O(nlgn),空间复杂度为O(1)。
代码:
public class Solution
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)
slow=slow.next;
fast=fast.next.next;
ListNode right=slow.next;
slow.next=null;//将左右链表断开
return merge(sortList(head),sortList(right));
public ListNode merge(ListNode head,ListNode right)
if(head==null)
return right;
if(right==null)
return head;
ListNode pHead=new ListNode(0);
if(head.val<right.val)
pHead=head;
pHead.next=merge(head.next,right);
else
pHead=right;
pHead.next=merge(head,right.next);
return pHead;
以上是关于45.Sort List(链表排序)的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]148. Sort List链表归并排序
[Leetcode] insertion sort list 链表插入排序