您的位置:首页 > 其它

[leetcode] 148. Sort List 解题报告

2016-01-10 12:05 489 查看
题目链接:https://leetcode.com/problems/sort-list/

Sort a linked list in O(n log n)
time using constant space complexity.

思路:可以利用递归的性质。

归并排序时间复杂度为O(n*log(n)),但是这题要求空间复杂度为O(1),利用递归其实是消耗了O(log(n))的栈空间,但已经可以视为常量空间复杂度。

每次可以使用快慢指针将链表二分,然后再递归分割.直到分割到最小开始合并链表.最后返回的就是排过序的数组了.

啊!海贼王该更新了,上期new year又停更了一集!

递归代码如下:

/**
* 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 || !head->next) return head;
ListNode *slow = head, *fast = head;
while(fast->next && fast->next->next)
{
slow = slow->next;
fast = fast->next->next;
}
fast = slow->next, slow->next = NULL;
auto p = sortList(head), q = sortList(fast);
ListNode *pHead = new ListNode(0), *tem = pHead, *val;
while(p || q)
{
if(!q || (p && p->val < q->val))
{
tem->next = p;
p = p->next;
}
else
{
tem->next = q;
q = q->next;
}
tem = tem->next;
}
head = pHead->next;
delete pHead;
return head;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: