Sort List

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

                  Have you been asked this question in an interview?                   Yes               说明:归并排序: 时间 O(nlogn),空间 O(1). 每次将链表一分为二, 然后再合并。快排(用两个指针)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/ ListNode* getMid(ListNode *head) {
ListNode *first, *second, *preFirst;
preFirst = first = second = head;
while(second != NULL) {
preFirst = first;
first = first->next;
if(second->next == NULL) break;
second = second->next->next;
}
preFirst->next = NULL;
return first;
} void Merge(ListNode *head1, ListNode *head2) {
if(head1->val > head2->val) {
int tem = head1->val;
head1->val = head2->val;
head2->val = tem;
}
ListNode *p = head1;
while(p->next != NULL && head2 != NULL) {
if(p->next->val >= head2->val) {
ListNode *q = p->next;
p->next = head2;
head2 = head2->next;
p->next->next = q;
p = p->next;
} else {
p = p->next;
}
}
if(head2 != NULL)
p->next = head2;
} void MergeSort(ListNode *head) {
if(head == NULL || head->next == NULL) return;
ListNode *mid = getMid(head);
MergeSort(head);
MergeSort(mid);
Merge(head, mid);
} class Solution {
public:
ListNode *sortList(ListNode *head) {
MergeSort(head);
return head;
}
};

Insertion Sort List

Sort a linked list using insertion sort.

说明: 与顺序表不同的时,每次找插入位置时从头开始走。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
ListNode *p, *q;
for(q = head; q != NULL; q = q->next) {
for(p = head; p != q; p = p->next) {
if(p->val >= q->val) {
int tem = p->val;
p->val = q->val;
q->val = tem;
}
}
}
return head;
}
};
 
 

9. Sort List && Insertion Sort List (链表排序总结)的更多相关文章

  1. insertion sort list (使用插入排序给链表排序)

    Sort a linked list using insertion sort. 对于数组的插入排序,可以参看排序算法入门之插入排序(java实现),遍历每个元素,然后相当于把每个元素插入到前面已经排 ...

  2. 148. Sort List (java 给单链表排序)

    题目:Sort a linked list in O(n log n) time using constant space complexity. 分析:给单链表排序,要求时间复杂度是O(nlogn) ...

  3. [leetcode sort]147. Insertion Sort List

    Sort a linked list using insertion sort. 利用插入排序对一个链表进行排序 思路和数组中的插入排序一样,不过每次都要从链表头部找一个合适的位置,而不是像数组一样可 ...

  4. [LeetCode] Sort List 链表排序

    Sort a linked list in O(n log n) time using constant space complexity. 常见排序方法有很多,插入排序,选择排序,堆排序,快速排序, ...

  5. [LeetCode] 148. Sort List 链表排序

    Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2-> ...

  6. 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)

    跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...

  7. [Swift]LeetCode147. 对链表进行插入排序 | Insertion Sort List

    Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...

  8. LeetCode 147. Insertion Sort List 链表插入排序 C++/Java

    Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...

  9. 【链表】Insertion Sort List

    题目: Sort a linked list using insertion sort. 思路: 插入排序是一种O(n^2)复杂度的算法,基本想法相信大家都比较了解,就是每次循环找到一个元素在当前排好 ...

随机推荐

  1. valueOf() toString() typeof instanceof

    ******在chrome console中运行{a:1}.valueOf(); 报错:"SyntaxError: Unexpected token . ",这是由于{}被js引擎 ...

  2. 计算第k个质因数只能为3,5,7的数

    英文描述:Design an algorithm to find the kth number such that the only prime factors are 3, 5, and 7 思路: ...

  3. android 面试总结,后续注意学习

    1.数据结构和算法 一般情况下,工作中是用不到的,但是就是问,每个公司都问,而且有的公司还问的特别深,还让你手写代码.我觉得这个确实有点恶心,我个人也是很讨厌算法的,但是真是没办法,人家就问,你说怎么 ...

  4. webshell

    webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门.黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下 ...

  5. SAP 增强-出口选找方法-全部

    ■ SAP 中如何寻找增强 方法一:利用TCODE寻找增强(第二代的增强) 执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个 ...

  6. Python12期培训班-day1-登陆验证代码分享

    #!/usr/bin/env python import sys import getpass afile = 'afile' bfile = 'bfile' circulation_num=0 #循 ...

  7. C# WinForm 应用程序 开启Console窗口

    /********************************************************************************* * C# WinForm 应用程序 ...

  8. UIControlEventTouch

    在控件事件中,简单解释下下面几个事件. 说明:由于是在“iOS 模拟器”中测试的,所以不能用手指,只能用鼠标. 1)UIControlEventTouchDown 指鼠标左键按下(注:只是“按下”)的 ...

  9. pelican-python install

    参考: http://www.cnblogs.com/ballwql/p/pelican.html 写的原因是,我的安装环境与原作者的安装过程有不一样的地方,所有总结一下. 本文将从以下几个方面进行描 ...

  10. ASP.NET MVC+EF框架+EasyUI实现权限管理系列

    http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...