题目:

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相关推荐

  1. 【学习点滴】cpp遇到的一些疑问和积累

    目录 1.虚函数的问题 2.多种构造函数问题 3.全局变量和局部变量重名的问题: 4.有符号数溢出问题 5.自己实现c的字符串库函数 6.栈破坏问题 7.右值引用 移动构造和移动赋值 8.字符串作为h ...

  2. POJ 1904 【强连通分量】.cpp

    题意: 很久很久以前.. 有一个国王.. 他有好几个儿子.. 这些王子都喜欢上了邻国的公主.. 他们准备迎娶自己喜欢的公主中的一个.. 国王就让宰相给列一个清单.. 宰相就给了国王一个清单..上面写明 ...

  3. leetcode 【 Sort List 】 python 实现

    题目: Sort a linked list in O(n log n) time using constant space complexity. 代码:oj 测试通过 Runtime: 372 m ...

  4. HDOJ2000(ASC||码排序)【sort函数】

    Problem : 2000 ( ASCII码排序 )     Judge Status : Accepted RunId : 5973850    Language : C++    Author ...

  5. Hdu 1072 【广搜】.cpp

    题意: 给出一个n*m的矩阵, 0 表示不可走 1 表示可走 2 表示起点 3 表示终点 4 表示可走且走到这一步可以满血 某人一开始有6滴血,走一步少一滴..到0就死了.. 可以走到4的位置满血再走 ...

  6. 【Next Permutation】cpp

    题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...

  7. POJ 3422 【最大费用】.cpp

    题意: 给出一个每一格带值的矩阵 每一次只可以从左上角走到右下角 问走过k次后最多能得到多少值 P.S 走过的格子值会变成0 输入: 给出一个n 和 k 给出n*n 矩阵 思路: 因为求的是最大值 所 ...

  8. 【Divided Two】cpp

    题目: Divide two integers without using multiplication, division and mod operator. If it is overflow, ...

  9. 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI .

    本系列文章由zhmxy555编写,转载请注明出处.  http://blog.csdn.net/zhmxy555/article/details/7434317 作者:毛星云    邮箱: happy ...

最新文章

  1. 开心周末:这就是2018年的我~
  2. 人造神经元计算速度超过人脑
  3. python3 判断数据类型
  4. 思科与华为生成树协议的对接
  5. Shiro与Springboot整合:配置依赖改造登录方法
  6. 2019计算机考研在职研究生,2019双证在职研究生报名条件
  7. 数字图像处理之Canny编程实现
  8. IAR 窗口重置默认配置
  9. 日本的“电力路由器”概述
  10. 虚拟键码对照表与ASCII对照表的整理
  11. centos6下如何安装mysql服务_CentOS6下安装MySQL数据库服务
  12. 现在大厂面试,也太太太太太难了吧!
  13. dubbox开发rest+json指南【转】
  14. Atitit swt 4.3 4.4 4.5 新特性java attilax总结
  15. Security+ 学习笔记14 对称密码学
  16. java 反序列化 怎么知道类_理解java中的序列化与反序列化
  17. jep 使用方法与简介
  18. javascript 上传的Excel格式校验
  19. python获取两个时间间隔的天数
  20. 移动硬盘文件丢失如何找回丨500G硬盘

热门文章

  1. springcloud 组件_深入理解 Spring Cloud 核心组件与底层原理
  2. 【总结】超1000页有三AI文档资源领取方法汇总!
  3. 【每周CV论文】深度学习图像降噪应该从阅读哪些文章开始
  4. 全球及中国食品色素行业供应前景与发展趋势研究报告2022版
  5. Jquery获取DOM绑定事件
  6. centons7编译安装zabbix3.4【转https://www.cnblogs.com/kowloon/p/7771495.html】
  7. 【bzoj2154】Crash的数字表格 莫比乌斯反演
  8. php+ajax+jquery实现jsonp跨域
  9. 02 - Unit07:显示笔记下拉菜单、笔记的分享功能、笔记的删除功能
  10. C# WinForm获取 当前执行程序路径的几种方法