【Sort List】cpp
生活随笔
收集整理的這篇文章主要介紹了
【Sort List】cpp
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
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 || !head->next ) return head;ListNode dummy(-1);dummy.next = head;ListNode *p1=&dummy, *p2=&dummy;while ( p2 && p2->next && p2->next->next ){p1 = p1->next;p2 = p2->next->next;}ListNode *h1 = Solution::sortList(p1->next);p1->next = NULL;ListNode *h2 = Solution::sortList(dummy.next);return Solution::mergeTwo(h1, h2);}static ListNode* mergeTwo(ListNode *h1, ListNode *h2){ListNode dummy(-1);ListNode *p = &dummy;while ( h1 && h2 ){if ( h1->val<h2->val ){p->next = h1;h1 = h1->next;}else{p->next = h2;h2 = h2->next;}p = p->next;}p->next = h1 ? h1 : h2;return dummy.next;} };tips:
單鏈表時間要求O(nlongn) 且const extra space,可以選擇歸并排序(另,雙向鏈表適合用快速排序)
第一次沒有AC,原因是少考慮一種返回條件,即“head只有一個元素的時候需要直接返回”,修改之后第二次AC了。
===================================================
第二次過這道題,嘗試著摸索寫出來,一次AC了。
/*** 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 ) return NULL;if ( !head->next ) return head;ListNode dummpy(0);ListNode* p1 = &dummpy;ListNode* p2 = &dummpy;dummpy.next = head;while ( p2 && p2->next ){p1 = p1->next;p2 = p2->next->next;}ListNode* r = Solution::sortList(p1->next);p1->next = NULL;ListNode* l = Solution::sortList(dummpy.next);return Solution::merge2SortedLists(l,r);}static ListNode* merge2SortedLists(ListNode* p1, ListNode* p2){ListNode head(0);ListNode* p = &head;while ( p1 && p2 ){if ( p1->val < p2->val ){p->next = p1;p1 = p1->next;}else{p->next = p2;p2 = p2->next;}p = p->next;}p->next = p1 ? p1 : p2;return head.next;} };?
轉載于:https://www.cnblogs.com/xbf9xbf/p/4513027.html
總結
以上是生活随笔為你收集整理的【Sort List】cpp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#(9)——API调用
- 下一篇: 让改变输入法回车键的图标