链表排序
来源:互联网 发布:surface适合编程吗 编辑:程序博客网 时间:2024/06/05 00:57
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getMiddle(ListNode *head) { ListNode *fast=head; ListNode *slow=head; while(fast->next!=NULL) { fast=fast->next; if(fast->next!=NULL) fast=fast->next; else break; slow=slow->next; } return slow; } ListNode *merge(ListNode *list1,ListNode *list2) { ListNode *newhead=new ListNode(0); ListNode *head=newhead; while(list1!=NULL&&list2!=NULL) { if(list1->val<list2->val) { newhead->next=list1; list1=list1->next; } else { newhead->next=list2; list2=list2->next; } newhead=newhead->next; } if(list1==NULL) newhead->next=list2; else newhead->next=list1; return head->next; } ListNode *sortList(ListNode *head) { if(head==NULL||head->next==NULL) return head; ListNode *mid=getMiddle(head); ListNode *head2=mid->next; mid->next=NULL; return merge(sortList(head),sortList(head2)); }};
使用头结点归并的方法可大幅度降低逻辑上的复杂度
0 0
- 链表排序 归并排序
- 链表排序--选择排序
- 链表排序--快速排序
- 链表排序--归并排序
- 排序3:插入排序(普通插入排序 + 折半插入排序 + 链表插入排序 + 希尔排序)
- LIST排序, Struct排序, qsort排序, STL::LIST sort排序, 链表排序
- 单向链表排序:快速排序和归并排序
- 单向链表排序-归并排序
- 链表排序,使用插入排序,
- 链表排序-直接插入排序
- 链表的一种排序---冒泡排序
- c 链表排序 - 选择排序
- 链表排序之插入排序
- 插入排序进行链表排序
- 优化冒泡排序 & 链表选择排序
- 链表排序之选择排序
- 链表排序之冒泡排序
- 链表排序(归并排序)
- java基础:递归应用---遍历文件目录
- 键值编码和通用编程
- 使用Lucene 3.0.0的结构遍历TokenStream的内容
- valueForKeyPath的使用
- Java多线程初步了解
- 链表排序
- const int * pi 、int const * pi与int * const pi及其操作
- 黑马程序员------C语言-----初识C语言
- Object-c 数组总结
- poj3299 Humidex
- (hdu step 2.2.8)N!Again(求N!的阶乘%2009以后的结果)
- OpenFire源码学习之五:用户登录
- BZOJ 3011 Usaco2012 Dec Running Away From the Barn 可并堆
- Java语言程序设计-基础篇-5.6习题-显示模式