sort-list

来源:互联网 发布:网络信用卡怎么申请 编辑:程序博客网 时间:2024/06/03 22:08

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:    ListNode *sortList(ListNode *head) {        if(head==NULL || head->next==NULL)            return head;        //用快慢指针找到中点        ListNode *p = head;        ListNode *q = head->next;        while(q!=NULL && q->next!=NULL){            p = p->next;            q = q->next->next;        }        ListNode *right = sortList(p->next);        p->next = NULL;//把链表从中间截断        ListNode *left = sortList(head);        //上面递归调用,到这里的时候左右链表都只剩一个值        return merge(left,right);    }    ListNode *merge(ListNode *left,ListNode *right){        ListNode dummy(0);        ListNode *tmp = &dummy;        while(left && right){            if(left->val < right->val){                tmp->next = left;                left = left->next;            }            else{                tmp->next = right;                right = right->next;            }            tmp = tmp->next;        }        if(left!=NULL)            tmp->next = left;        if(right!=NULL)            tmp->next = right;        return dummy.next;    }};