LeetCode :: Insertion Sort List [具体分析]
Sort a linked list using insertion sort.
仍然是一个很简洁的题目,让我们用插入排序给链表排序;这里说到插入排序。能够来回想一下, 最主要的入门排序算法。就是插入排序了。时间复杂度为n^2。最主要的插入排序是基于数组实现的。以下给出基于数组实现的插入排序,来体会一个插入排序的思想;
下面仅为数组实现。不是解题代码,没兴趣能够跳过。
void insertionsort (int a[], int N)
{
for (int i = 1; i < N; i++){
int tmp = a[i];
for (int j = i; j >= 0 && a[j] < a[j - 1]; j--) //这里是升序排列,所以是a[j] < a[j - 1]
a[j] = a[j - 1];
a[j] = tmp;
}
}
当做链表的时候,有两点主要差别:一、因为是单向链表。所以和数组不同的是,每一次都从第一个节点向后扫描。寻找合适的插入位置;当然。数组也是能够这种。
二、数组须要挨个替换。我上面的写法在寻找合适位置的同一时候就直接替换了,所以感觉没那么明显,而链表则是在需找到合适位置之后,把待排序节点拿出插入当中。体现了链表的动态性。
/**
* 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) {
if (head == NULL || head->next == NULL)
return head; ListNode *tmp = NULL;
ListNode *pre_tmp = NULL;
ListNode *dummy = new ListNode(0);
ListNode *pos = head->next; //这里用pos指向第一待插入排序数据
ListNode *pre_pos = head;
dummy->next = head; while(pos != NULL){
tmp = dummy->next; //这里一開始写成了 tmp = head 一直错,太不细心了。在引入哑节点之后,
//这里就不能等于head,仅仅有这样才干够从第一个開始扫描開始扫描。
pre_tmp = dummy;
while(tmp->val < pos->val && tmp != pos){ //第二个条件在数组插入排序时事不用推断的。这里须要注意!
pre_tmp = tmp;
tmp = tmp->next;
} if (tmp != pos)
{
pre_pos->next = pos->next;
pre_tmp->next = pos;
pos->next = tmp;
pos = pre_pos;
}
pre_pos = pos;
pos = pos->next;
}
return dummy->next;
}
};
PS:dummy节点对于头节点可能变化的链表来说,引入是一个非常方便的事情,可是要记得链表的起始用dummy->next表示出,而不是使用head,由于head由于改变节点点,它可能不是头节点 orz
版权声明:本文博主原创文章,博客,未经同意不得转载。
LeetCode :: Insertion Sort List [具体分析]的更多相关文章
- LeetCode——Insertion Sort List
LeetCode--Insertion Sort List Question Sort a linked list using insertion sort. Solution 我的解法,假设第一个节 ...
- [LeetCode] Insertion Sort List 链表插入排序
Sort a linked list using insertion sort. 链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表中取出来,然后按顺序插入到新链表中,时间复杂度为O(n2) ...
- leetcode Insertion Sort List
题目:Sort a linked list using insertion sort. 代码: /** * Definition for singly-linked list. * struct Li ...
- LeetCode: Insertion Sort List 解题报告
Insertion Sort List Sort a linked list using insertion sort. SOLUTION: 使用一个dummynode 创建一个新的链,将旧的节点插入 ...
- leetcode——Insertion Sort List 对链表进行插入排序(AC)
Sort a linked list using insertion sort. class Solution { public: ListNode *insertionSortList(ListNo ...
- [leetcode]Insertion Sort List @ Python
原题地址:http://oj.leetcode.com/problems/insertion-sort-list/ 题意:对链表进行插入排序. 解题思路:首先来对插入排序有一个直观的认识,来自维基百科 ...
- leetcode:Insertion Sort List
Sort a linked list using insertion sort. 分析:此题要求在链表上实现插入排序. 思路:插入排序是一种O(n^2)复杂度的算法,基本想法就是每次循环找到一个元素在 ...
- LeetCode解题报告:Insertion Sort List
Insertion Sort List Sort a linked list using insertion sort. leetcode subject思路:标准的插入排序.考察一下链表的操作. 对 ...
- [Leetcode Week16]Insertion Sort List
Insertion Sort List 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/insertion-sort-list/description/ ...
随机推荐
- Android onTouch、OnLongClick、onClick和ScrollView滑动事件冲突
为了实现近期录制的长按,松开手指,结束录制功能.在项目,难道你去走一走会头晕,书写demo为了下一个梳理. 顺便研究android事件调用机制. 先上效果界面: 布局: <RelativeLay ...
- Why 使用TLS记录封装IP层VPN IS A Bad Idea
一个很自然的想法,使用TLS套餐一IP数据报实现第三层VPN.这种想法必须经过深思熟虑的,但不幸的是,.这是一个错误的想法.有文章<Why TCP Over TCP Is A Bad Idea& ...
- ftp桥接到http服务
先说一下我的需求:我的linodeserver近期ftp和sftp连不上了,port被封了.仅仅有http能够訪问,我没有办法上传文件了.由于我寻常都用beyond compare上传文件,非常方便. ...
- Gitblit配置
Gitblit的安装配置及访问-windows (2013-09-11 11:52:31) 转载▼ 分类: android基础 Git 是现在很流行的分布式版本控制工具,github更是人人皆知. ...
- URAL 1934 Black Spot --- 最短的简单修改
右侧是1.维护的同时保持最短路p值至少,我有直接存款(1-p).该概率不满足,为了使这个值极大. #include <iostream> #include <cstdlib> ...
- C++写一个简单的解析器(分析C语言)
该方案实现了一个分析C语言的词法分析+解析. 注意: 1.简单语法,部分秕.它可以在本文法的基础上进行扩展,此过程使用自上而下LL(1)语法. 2.自己主动能达到求First 集和 Follow 集. ...
- 点击 下载 pdf
<iframe id="fileDownFrame" src="" style="display:none; visibility:hidde ...
- C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。
原文:C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从[网路图片].[Assets资源].[UI]修改锁定画面. 一般我们在开发Windows ...
- hdoj 2102 A计画 【BFS】
称号:hdoj 2102 A计画点击打开链接 意甲冠军:文的就不说了.求救出公主所须要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个 ...
- [模式识别].(希腊)西奥多里蒂斯<第四版>笔记8它__模板匹配
在语音识别方面,同样的话都是同一个人,每次说的情况是不同的,难以识别.本章是定义如何适应不同的情况有不同的特性指标. 1,基于最优路径搜索的度量:①贝尔曼最优性原则和动态编程②编辑距离(The E ...