lintcode刷题系列:链表排序----归并排序 递归
来源:互联网 发布:睿智体育0 淘宝店 编辑:程序博客网 时间:2024/06/18 10:49
归并排序的时间O(nlgn)
1>找到链表的中间值;
2>合并两个有序的链表;
ListNode* Sort(ListNode *head) {
if(head==NULL || head->next==NULL) {
return head;
}
return mergesort(head);
}
ListNode* mergesort(ListNode *head) {
if(head==NULL || head->next==NULL) {
return head;
}
ListNode *pHead, *qHead, *pre;
pHead = qHead = head;
pre = NULL;
while(qHead!=NULL || qHead->next!=NULL) {
qHead = qHead->next->next;
pre = pHead;
pHead = pHead->next;
}
pre->next = NULL; //分裂成两个独立的链表
ListNode *l, *r;
l = mergesort(head);
r = mergesort(pHead);
return merge(l, r); //合并
}
ListNode* merge(ListNode* l, ListNode *r) {
ListNode *res = (ListNode*)malloc(sizeof(ListNode));
ListNode *temp = res;
while(l!=NULL && r!=NULL) {
if(l->val < r->val) {
temp->next = l;
temp = temp->next;
l = l->next;
} else {
temp->next = r;
temp = temp->next;
r = r->next;
}
}
if(l!=NULL) {
temp->next = ;
} else if (r!=NULL) {
temp->next = r;
}
temp = res->next;
free(res);
return temp;
}
- lintcode刷题系列:链表排序----归并排序 递归
- LintCode刷题系列:数组排序--归并排序 递归
- 链表归并排序的递归与非递归实现
- 排序-归并排序(递归版)
- 归并排序之----递归
- 归并排序递归算法
- 归并排序递归
- 归并排序 分治+递归
- 归并排序 非递归
- JAVA递归--归并排序
- 递归的归并排序
- 归并排序(递归)
- 归并排序非递归
- 归并排序递归实现
- 归并排序(递归)
- 递归-E-归并排序
- 归并排序(非递归)
- 递归与归并排序
- POJ-3984迷宫问题dfs
- gulp教程 前端工作环境的搭建
- Java反射生成对象注入spring(结合工厂模式)
- 变态跳台阶
- python中set(集合)类型的操作
- lintcode刷题系列:链表排序----归并排序 递归
- Java第一个设计模式----单例设计模式
- ABAP实例:如何设计和使用自定义的权限对象
- 原来python开发后端服务器还可以这么简单(未完成)
- Go 的 flag 包可以解析命令行的参数
- Linux NFS 服务器的安装与配置
- semaphore信号量使用
- 关于js跨域的问题
- PHP-变量(三)(局部变量、全局变量、超全局变量)