首页 > 代码库 > Sort List

Sort List

归并排序的链表法

#include<iostream>using namespace std;struct ListNode{    int val;    ListNode *next;    ListNode(int x) : val(x), next(NULL) {}};class Solution{public:    ListNode* mergeLists(ListNode *a,ListNode *b)    {        if(a==NULL) return b;        if(b==NULL) return a;        ListNode *ret;        ret = new ListNode(-1);        ListNode *tail = ret;        while(a && b)        {            if(a->val<b->val)            {                tail->next=a;                a=a->next;            }            else            {                tail->next=b;                b=b->next;            }            tail=tail->next;        }        if(a) tail->next=a;        if(b) tail->next=b;        ListNode *del;        del=ret;        ret=ret->next;        delete del;        return ret;    }    ListNode *getMid(ListNode *head)    {        if(!head) return NULL;        if(!head->next) return head;        ListNode *slow = head;        ListNode *fast = head->next;        while(fast && fast->next)        {            slow = slow->next;            fast = fast->next->next;        }        return slow;    }    ListNode *sortList(ListNode *head)    {        if(!head) return NULL;        if(!head->next) return head;        ListNode *mid = getMid(head);        ListNode *nextPart = NULL;        if(mid)        {            nextPart = mid->next;            mid->next = NULL;        }        return mergeLists(                   sortList(head),                   sortList(nextPart));    }} t;/*ListNode* ListNodeCreate(){    int data;    ListNode *ret;    ret = new ListNode(-1);    ListNode *tail;    tail=ret;    while(cin>>data)    {        if(data=http://www.mamicode.com/=0) break;" ";        L=L->next;    }}int main(){    ListNode *L;    L=ListNodeCreate();    ListNode *T=t.sortList(L);    PrintList(T);    return 0;}*/