LeetCode 148. 排序链表(归并排序、快速排序)
发布日期:2021-07-01 03:15:45
浏览次数:2
分类:技术文章
本文共 2093 字,大约阅读时间需要 6 分钟。
文章目录
1. 题目
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 解题
2.1 归并排序
参考
class Solution { public: ListNode* sortList(ListNode* head) { if(head == NULL || head->next == NULL) return head; ListNode *fast = head->next, *slow = head, *rightHead; //fast初始化先走一步,偶数个链表时,防止一边0个,一边2个节点 while(fast && fast->next) { fast = fast->next->next; slow = slow->next; } rightHead = slow->next; slow->next = NULL;//先断开,再操作左右!!! ListNode *right = sortList(rightHead); ListNode *left = sortList(head); return merge(left, right); } ListNode* merge(ListNode *left, ListNode *right) { ListNode *emptyHead = new ListNode(0);//虚拟哨兵头 ListNode *cur = emptyHead; while(left && right) { if(left->val < right->val) { cur->next = left; left = left->next; } else { cur->next = right; right = right->next; } cur = cur->next; } cur->next = (left == NULL ? right : left); cur = emptyHead->next; delete emptyHead; return cur; }};
2.2 快速排序
class Solution { public: ListNode* sortList(ListNode *head) { quicksort(head, NULL); return head; } void quicksort(ListNode *head, ListNode *tail) { if(head == tail || head->next == NULL) return; ListNode *mid = partition(head,tail); quicksort(head, mid); quicksort(mid->next, tail); } ListNode* partition(ListNode *head, ListNode *tail) { int pivot = head->val; ListNode *left = head, *cur = head->next; while(cur != NULL && cur != tail) { if(cur->val < pivot) { left = left->next; swap(cur->val, left->val); } cur = cur->next; } swap(left->val, head->val); return left; }};
转载地址:https://michael.blog.csdn.net/article/details/101313065 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月13日 04时30分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mlanuch文档翻译
2019-05-02
mloginfo文档翻译
2019-05-02
MHA向send_report传递的参数
2019-05-02
master_ip_failover_script脚本何时被调用
2019-05-02
MHA 一个slave宕机的影响
2019-05-02
Mysql使用binlog恢复数据解决误操作问题的两种方法
2019-05-02
理解和配置Out of memory: Kill process
2019-05-02
MySQL binlog格式解析
2019-05-02
mysql优化——explain详解
2019-05-02
linux 下 pip 安装教程
2019-05-02
运维监控系统之Open-Falcon
2019-05-02
数据库对比:选择MariaDB还是MySQL?
2019-05-02
Mysqlbinlog工具及导出数据并转换编码导入
2019-05-02
使用Percona MySQL 5.7版本遇到的坑
2019-05-02
名词解释:Linux内存管理之RSS和VSZ
2019-05-02
547. 省份数量
2019-05-02
基类与子类
2019-05-02
遍历操作模板
2019-05-02
固定长度与非固定长度字符串选择
2019-05-02