Leetcode: Sort List - 快排
来源:互联网 发布:企业的大数据平台 编辑:程序博客网 时间:2024/06/05 11:50
Sort a linked list in O(n log n) time using constant space complexity.
写呀写,一次又一次,总是搞不定,要么运行出错,要么超时。网上看了一下,原来需要考虑重复pivot的情况。总算过了。
/** * 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 == NULL) { return NULL; } ListNode *last = head; while (last->next != NULL) { last = last->next; } return listQuickSort(head, last); } ListNode *listQuickSort(ListNode *&head, ListNode *&last) { if (head != NULL && last != NULL && head != last) { ListNode *ltail = NULL; ListNode *pivot = NULL; ListNode *ptail = NULL; ListNode *rhead = NULL; listPartition(head, ltail, pivot, ptail, rhead, last); listQuickSort(head, ltail); listQuickSort(rhead, last); if (ltail != NULL) { ltail->next = pivot; } else { head = pivot; } ptail->next = rhead; if (last == NULL) { last = ptail; } } return head; } void listPartition(ListNode *&head, ListNode *<ail, ListNode *&pivot, ListNode *&ptail, ListNode *&rhead, ListNode *&last) { ListNode lguard(0); ltail = &lguard; ListNode pguard(0); pivot = &pguard; ptail = last; ListNode *cur = head; while (cur != ptail) { if (cur->val < ptail->val) { ltail->next = cur; ltail = cur; } else if (cur->val > ptail->val) { last->next = cur; last = cur; } else { pivot->next = cur; pivot = cur; } cur = cur->next; } head = lguard.next; pivot->next = ptail; pivot = pguard.next; if (ltail == &lguard) { head = NULL; ltail = NULL; } else { ltail->next = pivot; } last->next = NULL; if (last == ptail) { rhead = NULL; last = NULL; } else { rhead = ptail->next; } }};
0 0
- Leetcode: Sort List - 快排
- Leetcode 147. Insertion Sort List(链表实现快排)
- 148. Sort List(快排、归并)
- 待字闺中之快排单向链表;leetcode之Sort List
- 快排(Quick Sort)
- 快排qsort/sort
- HDU1425 <sort 快排>
- STL sort快排
- sort快排
- [leetcode][list][sort] Sort List
- HDOJ 1379 DNA Sorting (sort 快排)
- 快排Quick Sort到底有多快?
- 结构体数组-sort自定义快排
- STL之sort快排小结
- hdoj1236排名(sort快排,结构体)
- sort的内部排序之快排
- 1101. Quick Sort (25)[快排]
- Python中sort和sorted快排
- 算法导论系列文章之简单数组栈
- 基于SSLStrip的HTTPS会话劫持
- 学生应尽量购买正版
- 浅谈Java中的Set,List,Map的区别
- 将字符串转化为整数
- Leetcode: Sort List - 快排
- 我的2013---程序员的奋斗历程
- Python+django to create web-site
- MySQL索引背后的数据结构及算法原理
- JniHelper调用java静态和非静态方法总结(即cocos2dx中调用android平台下显示第三方广告)
- UNIX网络编程之简易客户端与服务端
- 上海现“找老公培训班” 最低价课程1.58万元
- 连接数据库localhost和127.0.0.1的区别 数据库默认端口号
- jsp中的action