[Leetcode]Sort List

来源:互联网 发布:2016淘宝各类目转化率 编辑:程序博客网 时间:2024/05/17 23:57

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

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    /*algorithm: quick sort     1: divide list to two : l1,l2     2: sort l1, l2 recrusive     3: merge l1,l2    */    ListNode* sortList(ListNode* head) {            if(!head)return NULL;            if(!head->next)return head;            ListNode* faster,*slower;            faster = slower = head;            while(faster && faster->next && faster->next->next){                faster = faster->next->next;                slower = slower->next;            }            ListNode* l1 = head,*l2 = slower?slower->next:NULL;            if(slower)slower->next = NULL;            l1 = sortList(l1);            l2 = sortList(l2);            //merge l1,l2            ListNode dummy(0),*tail = &dummy;            while(l1&&l2){                if(l1->val < l2->val){                    tail->next = l1;                    l1 = l1->next;                }else{                    tail->next = l2;                    l2 = l2->next;                }                tail = tail->next;            }            if(l1)tail->next = l1;            else tail->next = l2;            return dummy.next;    }};


0 0
原创粉丝点击