[leetcode-148]Sort List(c)
来源:互联网 发布:python 最小值 索引 编辑:程序博客网 时间:2024/05/18 22:46
问题描述:
Sort a linked list in O(n log n) time using constant space complexity.
分析:这里O(nlogn)的时间复杂度,肯定是归并排序和快排。但是这里是list存储的,所以不大好处理。
方法是:
先把list分为两段,每段以null为结尾。不以null为结尾行不行?不行,至少不方便,特别是在合并的时候,找不到终止点。
在归并的时候,维护一个left、right指针,以及一个当前指针和一个头指针。然后再继续合并。
代码如下:20ms
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeNode(struct ListNode* head) { struct ListNode* slow = head, *fast = head; while (fast != NULL && fast->next != NULL) { if (fast && fast != NULL) fast = fast->next; if (fast && fast != NULL) fast = fast->next; if (slow && fast != NULL) slow = slow->next; } if (fast == slow)//只剩下一个 return slow; struct ListNode *tmpNode = slow->next; slow->next = NULL; struct ListNode *leftHead = mergeNode(head); struct ListNode *rightHead = mergeNode(tmpNode); //合并 struct ListNode *left = leftHead, *right = rightHead; struct ListNode *tmpHead = NULL; struct ListNode *curNode = NULL; while (left != NULL && right != NULL) { if (left->val < right->val) { if (!curNode) { tmpHead = left; } else curNode->next = left; curNode = left; left = left->next; } else { if (!curNode) { tmpHead = right; } else curNode->next = right; curNode = right; right = right->next; } } if (left != NULL) curNode->next = left; else if (right != NULL) curNode->next = right; return tmpHead;}struct ListNode* sortList(struct ListNode* head) { return mergeNode(head);}
0 0
- [leetcode-148]Sort List(c)
- 【C++】【LeetCode】148. Sort List
- LeetCode(148)Sort List
- LeetCode: Sort List [148]
- LeetCode 148 Sort List
- [leetcode 148] Sort List
- [LeetCode 148]Sort List
- leetcode-148 Sort List
- Leetcode 148 Sort List
- LeetCode 148: Sort List
- 【leetcode 148 Sort List】
- Leetcode[148]-Sort List
- Sort List - LeetCode 148
- Leetcode# 148 Sort List
- Leetcode # 148 Sort List
- LeetCode(148) Sort List
- leetcode 148: Sort List
- [Leetcode]#148 Sort List
- 【bzoj2705】【sdoi2012】【longge的问题】【欧拉函数】
- jsonp跨域请求
- Knockout应用开发指南 第一章:入门
- CAD控件:易语言使用控件二次开发入门
- 为关联容器编写插入迭代器
- [leetcode-148]Sort List(c)
- CYPEESS USB3.0程序解读之---GPIO
- Ajax异步请求阻塞情况的解决办法
- web配置详解
- Spring整合Hibernate,不用HibernateDaoSupport与HibernateTemplate而用Hibernate自己的api分析说明
- Knockout应用开发指南 第二章:监控属性(Observables)
- org.hibernate.hql.ast.QuerySyntaxException: is not mapped
- CYPEESS USB3.0程序解读之---同步FIFO(slaveFifoSync)
- UINavigationController官方文档学习笔记