单链表的归并排序:时间复杂度O(nlogn),空间复杂度O(1)

来源:互联网 发布:淘宝可以货到付款吗? 编辑:程序博客网 时间:2024/05/22 17:06
/** * 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*pslow=head;        ListNode*pfast=head->next;        while(pfast&&pfast->next){            pslow=pslow->next;            pfast=pfast->next->next;        }        ListNode*h2=pslow->next;        pslow->next=NULL;        ListNode*p1=sortList(head);        ListNode*p2=sortList(h2);        return mergeList(p1,p2);    }    ListNode* mergeList(ListNode* headA,ListNode*headB){        ListNode*newhead=new ListNode(0);        ListNode*tail=newhead;        while(headA&&headB){            if(headA->val<headB->val){                tail->next=headA;                tail=headA;                headA=headA->next;            }else{                tail->next=headB;                tail=headB;                headB=headB->next;            }        }        while(headA) {            tail->next=headA;            tail=headA;            headA=headA->next;        }        while(headB) {            tail->next=headB;            tail=headB;            headB=headB->next;        }        ListNode* rehead=newhead->next;        delete newhead;        return rehead;    }};

阅读全文
0 0
原创粉丝点击