Sort List

来源:互联网 发布:碧然德滤水壶 asa 知乎 编辑:程序博客网 时间:2024/05/22 15:53

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

单链表排序,要求O(nlogn),使用归并

class Solution {public:    //归并    ListNode *  MergeList(ListNode * a ,ListNode * b) {        ListNode pre(-1);        ListNode * cur = ⪯        while(a!=NULL && b!=NULL) {            if(a->val < b->val){                cur->next = a;                a = a->next;            }else{                cur->next = b;                b = b->next;            }            cur = cur -> next;        }        if(a!=NULL) cur->next = a;        if (b!=NULL) cur->next = b;        return pre.next;    }    //分割链表    void SplitList(ListNode * head,ListNode * & l , ListNode* & r) {        ListNode pre(-1);        pre.next = head;        if(head==NULL || head->next ==NULL) {            l = head;            r = NULL;        } else {            ListNode * mid = &pre,*tail=⪯            while(tail) {                tail = tail->next;                if(tail) {                    tail = tail->next;                    mid = mid->next;                }            }            r = mid->next;            mid->next = NULL;            l = head;        }    }    ListNode *sortList(ListNode *head) {        if(head == NULL || head->next==NULL) {            return head;        }        ListNode * l = NULL,*r = NULL;        SplitList(head,l,r);        l = sortList(l);        r = sortList(r);        return MergeList(l,r);    }};


0 0
原创粉丝点击