Sort List
来源:互联网 发布:淘宝网服装男士 编辑:程序博客网 时间:2024/06/16 11:19
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 ) { vector<int> vec; ListNode *p = head; while( p != NULL ) { vec.push_back( p->val ); p = p->next; } vector<int> tmp( vec.size() ); mergeSort( vec, tmp, 0, vec.size() - 1 ); p = head; for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++, p = p->next) p->val = *it; return head; } void mergeSort( vector<int> &vec, vector<int> &tmp, int left, int right ) { if( left < right ) { int center = ( left + right ) / 2; mergeSort( vec, tmp, left, center ); mergeSort( vec, tmp, center + 1, right ); merge( vec, tmp, left, center + 1, right ); } } void merge( vector<int> &vec, vector<int> &tmp, int leftPos, int rightPos, int rightEnd ) { int leftEnd = rightPos - 1; int tmpPos = leftPos; int numElements = rightEnd - leftPos + 1; while(leftPos <= leftEnd && rightPos <= rightEnd) if(vec[leftPos] < vec[rightPos]) tmp[tmpPos++] = vec[leftPos++]; else tmp[tmpPos++] = vec[rightPos++]; while(leftPos <= leftEnd) tmp[tmpPos++] = vec[leftPos++]; while(rightPos <= rightEnd) tmp[tmpPos++] = vec[rightPos++]; for(int i = 0; i < numElements; i++, rightEnd--) vec[rightEnd] = tmp[rightEnd]; }};
0 0
- list sort
- list sort
- Sort List
- Sort List
- list - sort
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- select(Linux 编程)
- Windows上编译最新的CURL,含有zlib,openssl
- c2java Greedy 之任务调度
- 八皇后问题 JAVA程序代码以及运行结果
- 第1次实验——NPC问题(回溯算法、聚类分析)
- Sort List
- WPF自定义ScrollViewer
- virtual box下centos5.5 vsftpd搭建步骤
- sql server 2008 win7下安装检查,重启计算机 失败
- Android项目打第三方jar包
- 浅谈-----多线程(一)
- 下一个云计算的大事件:谷歌拥抱Docker
- 设计模式——命令模式
- tableView的小节