Leetcode156: Sort List
2015-11-13 16:05
330 查看
Sort a linked list in O(n log n)
time using constant space complexity.
用归并排序的思想,每次把链表分成两段,分别排序然后合并。
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; return mergeSort(head); } ListNode * mergeSort(ListNode *head){ if(!head||!head->next) return head; ListNode *p=head, *q=head, *pre=NULL; while(q&&q->next!=NULL){ q=q->next->next; pre=p; p=p->next; } pre->next=NULL; ListNode *lhalf=mergeSort(head); ListNode *rhalf=mergeSort(p); return merge(lhalf, rhalf); } ListNode *merge(ListNode *a, ListNode *b) { ListNode *node = new ListNode(-1); ListNode *ptr = node; while(a && b) { if(a->val<=b->val) { ptr->next = a; a = a->next; } else { ptr->next = b; b = b->next; } ptr = ptr->next; } ptr->next = a!=NULL?a:b; return node->next; } };
相关文章推荐
- Android 2种图片(相册--拍照)的上传方式
- Null导致闪退crash,解决方法
- 【Leetcode】202-Happy Number【Java实现】【Easy】
- 2 rocketmq mqadmin 的用法详解
- diff比较两个文件的差异
- [转]div与span区别及用法
- 手机自动化测试:Appium源码分析之跟踪代码分析八
- 微信jssdk录音功能开发记录
- myBatis配置和使用
- Glusterfs的基础知识与相关指令
- 安装JDK
- java String类型
- 读取手机联系人信息
- launcher2
- CodeTyphon32中自带例子源码:限制程序仅运行一次
- Hadoop 深入浅出学习记录1
- ONE readme study
- php 操作linux Crontab ,设定定时任务
- 分享一个简单的Makefile
- Node.js cookie-parser