您的位置:首页 > 其它

leetcode Sort List (Sort a linked list in O(n log n) time using constant space complexity)

2013-11-18 12:53 477 查看
Sort a linked list in O(n log n)
time using constant space complexity.

题目就是链表的排序。迅速回顾下排序时间在这个级别上的,发现只有归并是合适的。也就是写个链表上的归并排序吧。

对于链表上的归并,其实就是把链表断开然后重新连接上,每次从n/2处断开,分别排序后再链接起来。思路很简单,可能处理链表的时候复杂点。我就简单按照这个思路写了下一次ac。代码不难理解就直接贴代码吧。

ListNode *sortList(ListNode *head) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(!head)
return NULL;
int k=0;
ListNode *p=head;
while(p)
{
k++;
p=p->next;
}
if(k==1)
return head;
int l=k/2;    //计算结点个数,将链表分开。
p=head;
ListNode *q=head,*t=NULL;
for(int i=0;i<l && q ;i++)
{
if(i==l-1)
t=q;
q=q->next;
}
if(t)
t->next=NULL;//将链表分开。
p=sortList(p);//分别对两段排序
q=sortList(q);
ListNode *hd=NULL,*pp=NULL;
while(p&&q)//合并
{
if(p->val<=q->val)
{
if(!hd)
pp=hd=p;
else
{
pp->next=p;
pp=p;
}
p=p->next;
}
else
{
if(!hd)
hd=pp=q;
else
{
pp->next=q;
pp=q;
}
q=q->next;
}
}
if(p)
pp->next=p;
if(q)
pp->next=q;
return hd;
}

如果有不正确的地方,请指正谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息