150。3 - sort List- AC

来源:互联网 发布:微盘软件开发 编辑:程序博客网 时间:2024/06/04 23:24

终于 ac 一道题··· 


/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:ListNode * findMid(ListNode *phead){if (phead->next->next == NULL || phead->next == NULL || phead == NULL){return phead;}ListNode * pslow = phead;ListNode * pquick = phead;while (pquick->next && pquick->next->next)// the last second is not visited; after this process the "pquick" point to the last second;{pslow = pslow->next;pquick = pquick->next->next;}return pslow;}ListNode *Merge(ListNode *ph1, ListNode *ph2){if (ph1 == NULL) return ph2;if (ph2 == NULL) return ph1;ListNode *p1 = ph1;ListNode *p2 = ph2;ListNode *pnew = 0;if (p1->val > p2->val){pnew = p2;p2 = p2->next;}else{pnew = p1;p1 = p1->next;}ListNode *pres = pnew;while (p1 && p2){if (p1->val < p2->val){pnew->next = p1;p1 = p1->next;}else{pnew->next = p2;p2 = p2->next;}pnew = pnew->next;}p1 == NULL ? (pnew->next = p2) : (pnew->next = p1);return pres;}ListNode * sortList(ListNode *head){if (head == NULL || head->next == NULL) return head;ListNode *mid = findMid(head);ListNode *head2 = mid->next;mid->next = NULL; ListNode *ph1 = sortList(head);ListNode *ph2 = sortList(head2);return Merge(ph1, ph2);//Merge(sortList(head), sortList(head2));}};


0 0
原创粉丝点击