标签:
/*
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode sortList(ListNode head) {
//mergesort 空间复杂度为1;
if(head==null||head.next==null)
return head;
ListNode mid=findMid(head);
ListNode left=head;
ListNode right=mid.next;
mid.next=null;
left=sortList(left);
right=sortList(right);
head=merge(left,right);
return head;
}
//若链表节点为奇数,则找到中间节点;若链表节点为偶数,则找到两个中间节点的前一个;
public ListNode findMid(ListNode head)
{
ListNode prear=head;
ListNode pfront=head;
while(prear.next!=null&&prear.next.next!=null)
{
prear=prear.next.next;
pfront=pfront.next;
}
return pfront;
}
public ListNode merge(ListNode left,ListNode right)
{
if(left==null)
return right;
if(right==null)
return left;
//相较数组,并没有辅助数组的赋值操作,空间复杂度为O(1);
ListNode temp=new ListNode(0);
ListNode p=temp;
while(left!=null&&right!=null)
{
if(left.val<right.val)
{
p.next=left;
p=p.next;
left=left.next;
}else
{
p.next=right;
p=p.next;
right=right.next;
}
}
if(left!=null)
{
p.next=left;
}
if(right!=null)
{
p.next=right;
}
return temp.next;
}
}标签:
原文地址:http://blog.csdn.net/jingsuwen1/article/details/51350953