【leetcode每日一题】148.sort List
来源:互联网 发布:2017淘宝网红店排名 编辑:程序博客网 时间:2024/06/14 15:32
题目:Sort a linked list in O(n log n) time using constant space complexity.
解析:题目要求是对链表进行排序,但是复杂度不能超过O(nlgn)。符合题意的常见排序方法有快排、归并排序和堆排序。以下是用归并排序解决此题的步骤。
1)将链表从中间部分分为两个链表。具体做法是:声明两个指针,一个快指针和一个慢指针,当快指针指向NULL时,慢指针指向中间节点。
2)对左右链表进行递归,直到链表只剩一个节点为止。
3)调用归并函数,对两个链表进行归并。归并函数的实现思路,请见第21题:Merge two sorted lists http://blog.csdn.net/kevin_zhai/article/details/47439123
代码如下:
/** * 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||head->next==NULL) return head; return mergesort(head); } ListNode *mergesort(ListNode *head) { if(head==NULL||head->next==NULL) return head; ListNode *fast=head,*slow=head; ListNode *leftHalf,*rightHalf,*pre; while(fast!=NULL&&fast->next!=NULL) { fast=fast->next->next;pre=slow; slow=slow->next; } pre->next=NULL; leftHalf=mergesort(head); rightHalf=mergesort(slow); return merge(leftHalf,rightHalf); } ListNode *merge(ListNode *leftHalf,ListNode *rightHalf) { ListNode *result=new ListNode(0); ListNode *temp=result; while(leftHalf!=NULL&&rightHalf!=NULL) { if(leftHalf->val<rightHalf->val) { temp->next=leftHalf; temp=temp->next; leftHalf=leftHalf->next; } else { temp->next=rightHalf; temp=temp->next; rightHalf=rightHalf->next; } } if(leftHalf!=NULL) temp->next=leftHalf; if(rightHalf!=NULL) temp->next=rightHalf; temp=result->next; //delete result; return temp; }};
0 0
- 【leetcode每日一题】148.sort List
- 【leetcode每日一题】NO86.Partition List
- 【leetcode每日一题】61.Rotate List
- 【leetcode每日一题】Reorder List
- LeetCode 148. Sort List
- [LeetCode]148.Sort List
- [leetcode] 148.Sort List
- 148. Sort List LeetCode
- Leetcode 148. Sort List
- LeetCode *** 148. Sort List
- LeetCode 148. Sort List
- leetcode.148. Sort List
- LeetCode-148.Sort List
- [Leetcode] 148. Sort List
- 148. Sort List --- leetcode
- LeetCode - 148. Sort List
- leetcode 148. Sort List
- Leetcode 148. Sort List
- java中的数学计算函数
- 简单的通知
- C# - JSON详解
- CvMat、Mat、IplImage之间的转换详解
- MongoDB 搭建简易图片服务器
- 【leetcode每日一题】148.sort List
- Bootstrap学习:进度条
- IOS--文件管理NSFileManager
- python string包——简易函数使用
- Bootstrap学习:多媒体对象
- iOS中的沙盒机制
- 怎么去掉discuz!的portal.php后缀
- 深入浅出学Spring Data JPA
- Gartner预测2015年十大战略技术趋势