ACM-单向链表插入排序算法(在原链表上操作)
/*
1.若链表只有一个节点或者为空,直接返回
2.将链表的前两个节点排序,并将排序之后的第二个节点的下一个节点赋空
3.此时整个链表分为了两个,将未排序的节点一一插入到已排序链表中:
3.1.第一种情况,待插入节点比排序链表的头节点小
3.2.第二种情况,待插入节点比排序链表的最后节点大
3.3.第三种情况,待插入节点可插入到排序链表中
*/
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
//输入为空或者只有一个节点
if(!head || !head->next)return head;
ListNode *unSortCur = head->next->next;
if(head->val > head->next->val)
{
ListNode *p = head;
head = head->next;
head->next = p;
p->next = nullptr;
}
else
head->next->next = nullptr;
while(unSortCur != nullptr) //QQQ
{
ListNode *sortPre = head;
ListNode *sortCur = sortPre->next;
ListNode *unSortNext = unSortCur->next;
if(unSortCur->val < head->val)
{
unSortCur->next = head;
head = unSortCur;
}
else{
while(sortCur != nullptr && unSortCur->val > sortCur->val)
{
sortCur = sortCur->next;
sortPre = sortPre->next;
}
if(sortCur == nullptr){
sortPre->next = unSortCur;
unSortCur->next = nullptr;
}
else{
sortPre->next = unSortCur;
unSortCur->next = sortCur;
}
}
unSortCur = unSortNext;
}
return head;
}
};
ACM-单向链表插入排序算法(在原链表上操作)的更多相关文章
- 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述
关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...
- 数据结构与算法——链表 Linked List(单链表、双向链表、单向环形链表-Josephu 问题)
链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还 ...
- [LeetCode] Insertion Sort List 链表插入排序
Sort a linked list using insertion sort. 链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表中取出来,然后按顺序插入到新链表中,时间复杂度为O(n2) ...
- 数据结构与算法(c++)——反转链表
算法概述:要求实现将一条单向链表反转并考虑时间复杂度. 算法分析: 数组法(略): 将列表元素逐个保存进数组,之后再逆向重建列表 点评:实现逻辑最简单,需要额外的内存开销. 移动指针: 通过三个指针逐 ...
- 147 Insertion Sort List 链表插入排序
用插入排序对链表进行排序. 详见:https://leetcode.com/problems/insertion-sort-list/description/ Java实现: 链表的插入排序实现原理很 ...
- [LeetCode] 147. Insertion Sort List 链表插入排序
Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...
- LeetCode 147. Insertion Sort List 链表插入排序 C++/Java
Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...
- java数据结构和算法04(链表)
前面我们看了数组,栈和队列,大概就会这些数据结构有了一些基本的认识,首先回顾一下之前的东西: 在数组中,其实是分为有序数组和无序数组,我简单实现了无序数组,为什么呢?因为有序数组的实现就是将无序数组进 ...
- C语言:根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,-主函数中放入一个带头节点的链表结构中,h指向链表的头节点。fun函数找出学生的最高分-使用插入排序法对字符串中的字符进行升序排序。-从文件中找到指定学号的学生数据,读入次学生数据,
//根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,输出字母的大小与形参c一致,数量由形参d指定.例如:输入c为Y,d为4,则输出ZABC. #include <stdio.h> ...
随机推荐
- git submodule git 子模块管理相关操作
Git 子模块操作相关的一些命令备忘: # 当使用git clone下来的工程中带有submodule时,初始的时候 submodule的内容并不会自动下载下来的,需执行如下命令: git submo ...
- 程序运行时间测试 - 使用libc 中 time 函数 实现秒级的运行时间检测
c 标准库中,有time 函数,可以返回 1970年1月1日 开始到现在的秒数,我们可以调用两次的时间差来计算程序运行时间: https://github.com/yaowenxu/Workplace ...
- gcc-stack-protector机制【转】
转自:https://blog.csdn.net/lhl_blog/article/details/70193865 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上 ...
- 手机号码生成器app有吗,怎么使用的呢?
手机号码生成器app是有的,他有手机号码生成器安卓版,也有手机号码生成器苹果版的.很多人会误解他的功能以为是拿来生成号码来接验证码的,其实他不是拿来接短信的.它是用来给别人做营销找客沪的找客源的,接不 ...
- Python迭代器的用法,next()方法的调用
迭代器的用法: 首先说两个概念,一个是可迭代的对象,一个是迭代器对象,两个不同 可迭代的(Iterable):就是可以for循环取数据的,比如字典.列表.元组.字符串等,不可使用next()方法. 迭 ...
- 网络传播模型Python代码实现
SI模型 import numpy as np import matplotlib.pyplot as plt import smallworld as sw #邻接矩阵 a = sw.a # 感染率 ...
- 【STM32H7教程】第28章 STM32H7时间关键代码在ITCM执行的超简单方法
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第28章 STM32H7时间关键代码在ITCM执行 ...
- 正则表达式中的.*?和python中re.S参数的详解
本章的内容主要是为讲解在正则表达式中常用的.*?和re.S! 在正则表达式中有贪婪匹配和最小匹配:如下为贪婪匹配(.*) import re match = re.search(r'PY.*', 'P ...
- go-面向对象编程(下)
面向对象编程思想-抽象 抽象的介绍 我们在前面去定义一个结构体时候,实际上就是把一类事物的共有的 属性( 字段)和 行为( 方法)提取 出来,形成一个 物理模型(结构体).这种研究问题的方法称为抽象 ...
- JS中for,for...in,for...of以及foreach循环的用法
1.for()循环 // for循环的表达式之间用的是;号分隔的,千万不要写成, for (初始化表达式1; 判断表达式2; 自增表达式3) { // 循环体4 } 2.for...in索引遍历 va ...