leetcode:Sort List

来源:互联网 发布:信贷员靠谱抢单软件 编辑:程序博客网 时间:2024/05/29 18:31

使用常数空间的单链接排序算法,算法时间复杂度为O(nlogn),首先想到是的就是快速排序和二路归并排序,二路归并排序的实现比较简单,代码如下:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode *sortList(ListNode *head) {        if(!head || !head->next ) return head;                ListNode *p=head, *q=head, *pre=NULL;        while(p&&p->next){          p=p->next->next;          pre=q;          q=q->next;        }                pre->next=NULL;        return meger(sortList(head),sortList(q));    }        ListNode *meger(ListNode *lh, ListNode *rh){        ListNode *tmp=new ListNode(0);        ListNode *p=tmp;                while(lh&&rh)        {            if(lh->val<=rh->val) {                p->next=lh;                lh=lh->next;            }            else{                p->next=rh;                rh=rh->next;            }            p=p->next;        }                if(!lh) p->next=rh;        else p->next=lh;                p=tmp->next;        tmp->next=NULL;        delete tmp;                return p;    }};


0 0
原创粉丝点击