归并排序链表
来源:互联网 发布:33个皮肤模块源码 编辑:程序博客网 时间:2024/05/15 07:44
时间复杂度O(N*logN),空间复杂度O(1)
参考 http://www.cnblogs.com/TenosDoIt/p/3666585.html
#include <iostream>using namespace std;struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};ListNode *merge(ListNode *head1, ListNode *head2){ if (head1 == NULL) return head2; if (head2 == NULL) return head1; ListNode *head; if (head1->val < head2->val){ head = head1; head1 = head1->next; } else{ head = head2; head2 = head2->next; } //两个链表不为空 ListNode *p = head; while(head1 != NULL && head2 != NULL){ if (head1->val < head2->val){ p->next = head1; head1 = head1->next; } else{ p->next = head2; head2 = head2->next; } p = p->next; } //一个链表不为空 if (head1 != NULL){ p->next = head1; } else if (head2 != NULL){ p->next = head2; } return head;}ListNode *merge_sort_list(ListNode *head){ if (head == NULL || head->next == NULL){ //0个或1个结点 return head; } //找到中间结点 ListNode *fast = head; ListNode *slow = head; while(fast->next != NULL && fast->next->next != NULL){ fast = fast->next->next; slow = slow->next; } ListNode *fast_start = slow->next; slow->next = NULL; fast = merge_sort_list(fast_start); //后半段 slow = merge_sort_list(head); //前半段 return merge(fast, slow);}int main(){ ListNode *head = new ListNode(0); ListNode *node1 = new ListNode(3); ListNode *node2 = new ListNode(1); ListNode *node3 = new ListNode(2); ListNode *node4 = new ListNode(6); ListNode *node5 = new ListNode(5); ListNode *node6 = new ListNode(4); head->next = node1; node1->next = node2; node2->next = node3; node3->next = node4; node4->next = node5; node5->next = node6; ListNode *p = head; while(p){ cout << p->val << '\t'; p = p->next; } cout << endl; ListNode *result = merge_sort_list(head); p = result; while(p){ cout << p->val << '\t'; p = p->next; } cout << endl; int ttt = 0; return 0;}
0 0
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 归并排序链表
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表排序 归并排序
- 链表排序--归并排序
- 单向链表归并排序
- 单向链表归并排序
- 链表的归并排序
- 链表的归并排序
- CSS3实例教程:详解calc()函数功能
- 扩展型模式之Decorator(装饰器)模式
- 操作系统发展的简单历程
- python函数式编程之(open(var1 if not var2 else var2))
- easyui treegrid动态加载节点
- 归并排序链表
- 神经网络资料
- Cocos2d-x 3.9教程:9. Cocos2d-x中基于布局的容器控件
- Java异常处理和I/O处理
- 常用PLSQL子程序
- C++中的exit()函数
- 实现ExpandableListView 二级列表,点击二级条目状态的改变
- jar包和war包的区别
- SpringMVC jackson的一个小坑