【sort-list】
来源:互联网 发布:572-393的简便算法 编辑:程序博客网 时间:2024/06/18 14:36
Sort a linked list in O(n log n) time using constant space complexity.
题意实现一个链表排序的算法;
方法一:刚开始想的是自己定义个比较函数,然后调用sort()函数进行实现
class Solution{public:static bool cmp(ListNode* a, ListNode* b){return a->val < b->val;}ListNode* sortList(ListNode* head){if (head==NULL){return head;}vector<ListNode*> arrList;ListNode* p = head;while (p){arrList.push_back(p);p = p->next;}sort(arrList.begin(), arrList.end());p = head = arrList[0];for (int i=1; i<arrList.size(); i++){p->next = arrList[i];p = p->next;}arrList[arrList.size() - 1]->next = NULL;return head;}};
归并排序的一把步骤:
(1)将待排序数组去中间点并一分为二;
(2)递归地对左半部分进行归并排序;
(3)递归地对右半部分进行归并排序;
(4)将两个半部分进行合并,得到结果;
所以对应此题,可以分为三个小问题;
(1)找到链表中点;
(2)写出merge函数,即如何合并链表
(3)写出mergesort函数,实现上述步骤;
class Solution{public://找到链表中间位置ListNode* findMid(ListNode* head){ListNode* slow = head;ListNode* fast = head;while (fast!=NULL && fast->next!=NULL && fast->next->next!=NULL){slow = slow->next;fast = fast->next->next;}return slow;}//合并两个有序链表ListNode* mergeList(ListNode* h1, ListNode* h2){if (h1 == NULL){return h2;}else if (h2 == NULL){return h1;}else{ListNode* head = NULL;if (h1->val>h2->val){head = h2;h2 = h2->next;}else{head = h1;h1 = h1->next;}ListNode* p = head;while (h1 && h2){if (h1->val < h2->val){p->next = h1;h1 = h1->next;}else{p->next = h2;h2 = h2->next;}p = p->next;}if (h1) p->next = h1;if (h2) p->next = h2;return head;}}ListNode* sortList(ListNode* head){if (head == NULL || head->next == NULL){return head;}ListNode* mid = findMid(head);ListNode* h2 = sortList(mid->next);mid->next = NULL;ListNode* h1 = sortList(head);return mergeList(h1, h2);}};
阅读全文
0 0
- list sort
- list sort
- Sort List
- Sort List
- list - sort
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- POJ
- 数据报服务与流式服务的区别
- 项目——通过自动回复机器人学Mybatis(五)
- scikit-learn使用总结
- C#-WinForm-简单的音频播放器(基于WindowsMediaPlayer控件)(二)
- 【sort-list】
- ubuntu 报错: The system is running in low-graphics mode
- 背包问题 3 多重背包 解题报告
- 初识JWT(java web token)
- PyCharm配置mongo插件
- Java垃圾回收机制(2)- Java的内存分布
- 视频检测之:利用结构稀疏性(结构稀疏范数)进行RPCA分析
- bzoj4996: [Usaco2017 Feb]Why Did the Cow Cross the Road II
- 20. Valid Parentheses