leetcode 147.对链表进行插入排序

news2024/10/7 4:32:53

⭐️ 题目描述

在这里插入图片描述
在这里插入图片描述

🌟 leetcode链接:对链表进行插入排序

思路与图解:
请添加图片描述
遍历链表,当前结点依次与前面的结点比较,选择插入位置。每次与前面的结点比较需要从头开始比较,所以定义一个 tempHead 指针,在定义一个 tempHeadPrev 指针记录 tempHead 前一个结点位置(方便插入),在定义一个 tail 记录前面区间的尾结点,当插入时需要考虑头插还是中间插入,当当前元素比前面区间元素都大时,说明无需插入当前位置合适,只需要改变 tail 指针(相当于确定新区间),下次继续迭代即可。

1️⃣ 代码:

struct ListNode* insertionSortList(struct ListNode* head){
	// 从第二个结点开始遍历链表
    struct ListNode* cur = head->next;
    // 记录前面区间的尾部
    struct ListNode* tail = head;
    while (cur) {
    	// 记录下遍历的下一个位置
        struct ListNode* next = cur->next;
        // 区间的头部
        struct ListNode* tempHead = head;
        // 区间头部的前一个结点
        struct ListNode* tempHeadPrev = NULL;
        // cur 依次和区间元素进行比较确认插入位置
        while (cur != tempHead && cur->val > tempHead->val) {
            tempHeadPrev = tempHead;
            tempHead = tempHead->next;
        }
        // 如果 cur 比 当前区间所有结点数据都大 更新尾区间
        if (cur == tempHead) {
            tail = cur; 
        }
        else {
        	// 插入
            if (tempHeadPrev == NULL) {
                // 头插入更新头指针
                head = cur;
            } else {
            	// 中间插入
                tempHeadPrev->next = cur;
            }
            tail->next = cur->next;
            cur->next = tempHead;
        }

        // 迭代
        cur = next;
    }

    return head;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现PSO粒子群优化算法优化LightGBM回归模型(LGBMRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一…

CopyRE关系抽取

CopyRE 模型包括编码器和解码器两部分 编码器:将输入的句子(源句子)转换为固定长度的语义向量 解码器:读取该矢量并直接生成三元组 Encoder 编码器使用Bi-RNN对输入句子进行编码。 Decoder 解码器会直接生成三元组。 1、 解码…

仅用js代码实现模态框

很多时候我们经常会用ui框架实现模态框的使用,但是,如果哪一天告诉我们,如何仅用js代码实现一个模态框该怎么办呢? 这里就要用到很多js中的基础方法运用了,我们先看如下代码 var logDiv document.createElement(&quo…

Java版本电子招标采购系统源码:—实现多寻源比价,风险预警

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

vue2跨组件传值、透明传输($attrs 和 $listeners )

当在 Vue.js 组件中使用 $attrs 和 $listeners 时,它们提供了一种方便的方式来处理传递给组件的属性和事件监听器。 1.$attrs 是一个对象,包含了父组件传递给当前组件但未被当前组件声明的 props。这对于实现“透明传输”非常有用。 2.$listeners 也是…

EMQ 联合英特尔、云轴科技 ZStack 推出泛工业物联网联合解决方案

近日,EMQ 携手英特尔与云轴科技 ZStack 推出泛工业物联网联合解决方案,基于云原生超融合,在挖掘生产数据价值的同时有效降低综合建设成本,为用户提供一站式数据链路及 IT 基础设施解决方案。 工业能耗大户面临的关键挑战 工业正迈入一个全新的物联网时代,海量数据计算需求涌现…

实验三 交换机基本配置

文章目录 实验目的实验原理实验内容实验总结 实验目的 掌握 Cisco Packet Tracer 模拟软件的基本使用方法;掌握交换机的基本配置方法和命令;掌握交换机 telnet 配置方法;理解交换机不同配置视图的作用; 实验原理 (一…

Linux Shell 脚本编程学习之【第1章 Shell脚本编程概述】

《第1章 Shell脚本编程概述》 1 Linux简介2 Shell 简介3 Linux登录方式4 脚本编程优势4.1 shell脚本编程优势 5 shell脚本基本元素6 执行shell脚本 1 Linux简介 1991年芬兰赫尔辛基大型学生Linus Torvals开发了Linux内核。 2 Shell 简介 1、Shell是一种具备特殊功能的程序。…

【Java基础教程】(十)面向对象篇 · 第四讲:解析Java中的this关键字,引用传递印象加强:理解与实践~

Java基础教程之面向对象 第四讲 本节学习目标1️⃣ this 关键字1.1 调用本类属性1.2 调用本类方法1.3 表示当前对象 2️⃣ 引用传递2.1 基本概念2.2 实际应用 🌾 总结 本节学习目标 掌握关键字this的特征以及使用;掌握引用传递分析思维; …

UMS攸信技术是厦门市工业互联网园区建设的积极参与者与推动者,为数字化转型与工业互联网建设注入新动力

7月6日,厦门市工业互联网一体化进园区“百城千园行”活动第二站走进同安区常青藤科技园,与现场企业共话产业数字化创新发展。 本次活动以“工赋园区 数智未来”为主题,由厦门市工业和信息化局、厦门市同安区人民政府、厦门市同安区工业和信息…

809. 最小公倍数

链接: 链接 题目: 输入两个整数 aa 和 bb,请你编写一个函数,int lcm(int a, int b),计算并输出 aa 和 bb 的最小公倍数。 输入格式 共一行,包含两个整数 aa 和 bb。 输出格式 共一行,包含一个整…

【ELK集群】

ELK集群部署环境准备 配置ELK日志分析系统 192.168.108.67 elk-node1 es、logstash、kibana 192.168.108.189 elk-node2 es、logstash 192.168.108.32 apache logstash 三台虚拟机配置调高 三台机关闭防火墙 改名 1、2台机配置hosts解析文件 1,2台都用系…

Web入门-SpringBoot

SpringBootweb快速入门 需求:使用Spring Boot开发一个web项目,浏览器发起请求/hello后,给浏览器返回字符串”Hello World~“开发步骤 创建SpringBoot工程,并勾选web开发的相关依赖 根据自己idea的版本的不同创建模块即可 &#x…

Day39: 70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数

目录 70. 爬楼梯 (进阶) 322. 零钱兑换 思路 代码 279.完全平方数 思路 70. 爬楼梯 (进阶) 70. 爬楼梯 - 力扣(LeetCode) // 版本一 class Solution { public:int climbStairs(int n) {if (n …

汽配行业数字工厂管理系统解决方案

随着汽车行业的快速发展,汽配行业作为汽车产业链的重要组成部分,也面临着日益增长的市场需求和竞争压力。然而,传统行业在管理方面存在一系列问题,如管理效率低下、业务流程不优化、供应链不透明等。为了应对这些挑战,…

更快更复杂之—Mendix如何支持多种AI部署模式

在过去十年,LCAP市场逐渐崛起的同时,计算能力不断提高、大数据可用性不断增强,预计未来数年,低代码应用平台(LCAP)的市场将增长30%左右,并带动人工智能(AI)迎来新的春天。…

【Spring Boot】单元测试

单元测试 单元测试在日常项目开发中必不可少,Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持,以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…

Windows下控制台播放Badapple,opencv的使用,以及代码优化方案

Windows下控制台播放Badapple 环境准备 VS2022编译环境Opencv(对图像进行灰度处理)的配置 可以看我写的这篇文章vs下opencv的配置素材(Badpple的视频文件) 可以私信我FFmpeg(对视频文件进行处理) 让视频文件的声音分离出来生成mp3文件 ffmpeg -i test.mp4 -map 0:v:0 -c copy…

MySQL用户权限管理和密码策略

目录 用户和权限介绍 密码策略 修改密码策略 用户权限管理 赋予权限 收回权限 用户和权限介绍 所有用户的信息都保存在mysql.user 数据表中 可使用desc 查看数据表结构 user 常用字段 部分字段解析 完整的账户 包含host和user,都是char型 都没有默认值 ho…

fork函数,为什么有两次返回?

前言 fork函数用于创建一个新进程,称为子进程,它与旧进程(称为系统调用fork的进程)同时运行,此进程称为父进程。 创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc&a…