【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相关推荐
- 【学习点滴】cpp遇到的一些疑问和积累
目录 1.虚函数的问题 2.多种构造函数问题 3.全局变量和局部变量重名的问题: 4.有符号数溢出问题 5.自己实现c的字符串库函数 6.栈破坏问题 7.右值引用 移动构造和移动赋值 8.字符串作为h ...
- POJ 1904 【强连通分量】.cpp
题意: 很久很久以前.. 有一个国王.. 他有好几个儿子.. 这些王子都喜欢上了邻国的公主.. 他们准备迎娶自己喜欢的公主中的一个.. 国王就让宰相给列一个清单.. 宰相就给了国王一个清单..上面写明 ...
- leetcode 【 Sort List 】 python 实现
题目: Sort a linked list in O(n log n) time using constant space complexity. 代码:oj 测试通过 Runtime: 372 m ...
- HDOJ2000(ASC||码排序)【sort函数】
Problem : 2000 ( ASCII码排序 ) Judge Status : Accepted RunId : 5973850 Language : C++ Author ...
- Hdu 1072 【广搜】.cpp
题意: 给出一个n*m的矩阵, 0 表示不可走 1 表示可走 2 表示起点 3 表示终点 4 表示可走且走到这一步可以满血 某人一开始有6滴血,走一步少一滴..到0就死了.. 可以走到4的位置满血再走 ...
- 【Next Permutation】cpp
题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...
- POJ 3422 【最大费用】.cpp
题意: 给出一个每一格带值的矩阵 每一次只可以从左上角走到右下角 问走过k次后最多能得到多少值 P.S 走过的格子值会变成0 输入: 给出一个n 和 k 给出n*n 矩阵 思路: 因为求的是最大值 所 ...
- 【Divided Two】cpp
题目: Divide two integers without using multiplication, division and mod operator. If it is overflow, ...
- 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI .
本系列文章由zhmxy555编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7434317 作者:毛星云 邮箱: happy ...
最新文章
- 开心周末:这就是2018年的我~
- 人造神经元计算速度超过人脑
- python3 判断数据类型
- 思科与华为生成树协议的对接
- Shiro与Springboot整合:配置依赖改造登录方法
- 2019计算机考研在职研究生,2019双证在职研究生报名条件
- 数字图像处理之Canny编程实现
- IAR 窗口重置默认配置
- 日本的“电力路由器”概述
- 虚拟键码对照表与ASCII对照表的整理
- centos6下如何安装mysql服务_CentOS6下安装MySQL数据库服务
- 现在大厂面试,也太太太太太难了吧!
- dubbox开发rest+json指南【转】
- Atitit swt 4.3 4.4 4.5 新特性java attilax总结
- Security+ 学习笔记14 对称密码学
- java 反序列化 怎么知道类_理解java中的序列化与反序列化
- jep 使用方法与简介
- javascript 上传的Excel格式校验
- python获取两个时间间隔的天数
- 移动硬盘文件丢失如何找回丨500G硬盘
热门文章
- springcloud 组件_深入理解 Spring Cloud 核心组件与底层原理
- 【总结】超1000页有三AI文档资源领取方法汇总!
- 【每周CV论文】深度学习图像降噪应该从阅读哪些文章开始
- 全球及中国食品色素行业供应前景与发展趋势研究报告2022版
- Jquery获取DOM绑定事件
- centons7编译安装zabbix3.4【转https://www.cnblogs.com/kowloon/p/7771495.html】
- 【bzoj2154】Crash的数字表格 莫比乌斯反演
- php+ajax+jquery实现jsonp跨域
- 02 - Unit07:显示笔记下拉菜单、笔记的分享功能、笔记的删除功能
- C# WinForm获取 当前执行程序路径的几种方法