/*
* Sort a linked list in O(n log n) time using constant space complexity.
* */
public ListNode sortList(ListNode head)
{
ListNode start1 = null;
ListNode result = null;
ListNode start3 = null;
ListNode tmp=null;
start1 = head;
if(head==null || head.next==null)
{
return head;
}
//figure out the sum of number
int listlen = 0;
while(start1!=null)
{
listlen++;
start1 = start1.next;
}
//find the middle position and the node
int middle = listlen/2;
start1 = head;
for(int i=0;i<middle;i++)
{
if(i==middle-1)
{
tmp = start1;
}
start1 = start1.next;
}
//this make the first half end with null
tmp.next = null;
//recursively call this function
head = sortList(head);
start1 = sortList(start1);
//merge the two sorted list
head = merge(head, start1);
return head;
}
public ListNode merge(ListNode l1, ListNode l2)
{
ListNode tmp = new ListNode(0);
ListNode r = tmp;
while(l1 !=null && l2 !=null)
{
if(l1.val<=l2.val)
{
tmp.next = l1;
l1 = l1.next;
tmp = tmp.next;
}
else
{
tmp.next = l2;
l2 = l2.next;
tmp = tmp.next;
}
}
if(l1 == null)
{
tmp.next = l2;
}
else
{
tmp.next = l1;
}
r = r.next;
return r;
}
总结延伸: 排序算法以及容器使用 、
二路归并排序 ,递归终止条件
leetcode_Sort a linked list in O(n log n) time using constant space complexity.
最新推荐文章于 2019-07-22 08:34:43 发布