当前位置: 首页 > article >正文

详解单链表(含链表的实现过程)

目录一介绍单链表二顺序表和单链表的比较三单链表的实现四单链表例题实例​​​​1,力扣--203移除链表元素2,力扣--206.反转链表3力扣--876,链表的中间节点4力扣--21,合并两个有序链表5环形链表的约瑟夫问题6力扣--分割链表一介绍单链表单链表单链表是一种在物理结构上非连续在逻辑结构上连续的一种存储结构也是一种线性表。单链表的结构单链表由两部分构成数据域和指针域。数据域用来存放数据元素指针域用来存放下一个节点的地址二顺序表和单链表的比较选择建议使用顺序表1需要频繁访问数据2对内存效率要求高3开辟的内存数量固定或者可预估4不需要频繁进行数据的插入和删除使用单链表1需要频繁进行数据的插入和删除2数据量变化大不可预估3不需要随机访问三单链表的实现gitee代码链接:https://gitee.com/codelsj-w/test.3.15.c.git头文件slt.h源文件slt.c功能测试源文件code.c四单链表例题实例​​​​1,力扣--203移除链表元素题目解法思路创建一个新的单链表将原链表中不是val的数据尾插到新的单链表中代码实现:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ListNode; struct ListNode* removeElements(struct ListNode* head, int val) { //创建一个新的单链表 ListNode *newhead,*newtail; newhead newtail NULL; ListNode* pcur head; //遍历原链表 while(pcur) { if(pcur-val ! val) //不是要删除的节点就尾插 { //如果是空链表 if(newheadNULL) { newhead newtail pcur; } //如果不是空链表 else { newtail-next pcur; newtail pcur; } } pcur pcur-next; } if(newhead) //初始单链表可能为空 { newtail-next NULL; //让尾节点的下一个节点为空 } return newhead; }2,力扣--206.反转链表题目解法思路创建三个节点n1,n2,n3n1和n2负责反转指针n3负责记录位置防止丢失代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListNode* head) { //判空 if(head NULL) { return head; } //创建三个指针n1,n2用来反转链表n3用来记录位置防止丢失 ListNode* n1 NULL; ListNode* n2 head; ListNode* n3 head-next; while(n2) { n2-next n1; n1 n2; n2 n3; if(n3) //最后一次n3已经为空不能访问下一个节点 { n3 n3-next; } } return n1; }3力扣--876,链表的中间节点题目解法思路使用快慢指针快指针每次走两步慢指针每次走一步这样当快指针走的步数一定是慢指针的两倍当快指针走到链表的结尾时慢指针正好走到链表的中间节点。共有两种情况链表的节点的数目为奇数或者偶数代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ListNode; struct ListNode* middleNode(struct ListNode* head) { //创建快慢指针 ListNode* slow head; ListNode* fast head; while(fast fast-next) { fast fast-next-next; //快指针每次走两步 slow slow-next; //慢指针每次走一步 } return slow; //最后慢指针指向的就是链表的中间节点 }补充在while(fast fast-next) 不可交换顺序为while(fast-next fast)原因当链表中节点的数目为偶数时fast最后为NULL,此时不能再对fast进行下一个节点的查找会直接报错。4力扣--21,合并两个有序链表题目解法思路创建两个指针分别指向两个单链表的头节点用于遍历将节点的值进行比较将两者的较小值尾插到新建的单链表当中。代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { //判空 if(list1 NULL) { return list2; } if(list2 NULL) { return list1; } ListNode* l1 list1; ListNode* l2 list2; //创建一个新的单链表 ListNode *newhead, *newtail; //newhead newtail NULL; //使得头节点为一个哨兵位 newhead newtail (ListNode*)malloc(sizeof(ListNode)); //尾插入元素 while(l1 l2) { if(l1-val l2-val) { newtail-next l1; newtail newtail-next; l1 l1-next; } else { newtail-next l2; newtail newtail-next; l2 l2-next; } } //跳出循环时l1或l2中一定还有元素 if(l1) { newtail-next l1; } if(l2) { newtail-next l2; } //动态内存的释放 ListNode* ret newhead-next;//提前记录防止释放后丢失 free(newhead); newhead NULL; return ret; }5环形链表的约瑟夫问题题目解法思路先创建一个循环链表再创建两个指针一个指向头节点一个指向尾节点进行对链表的循环通过计数删除要删除的元素代码实现/** * 代码中的类名、方法名、参数名已经指定请勿修改直接返回方法规定的值即可 * * * param n int整型 * param m int整型 * return int整型 */ typedef struct ListNode ListNode; //创建一个节点 ListNode* buyNode(int x) { ListNode* node (ListNode*)malloc(sizeof(ListNode)); if(nodeNULL) { exit(1); } node-val x; node-next NULL; return node; } //创建循环链表 ListNode* buycircle(int n) { //创建头尾节点 ListNode* head buyNode(1); ListNode* tail head; //创建其他节点 for(int i2; in; i) { tail-next buyNode(i); tail tail-next; } //首尾相连 tail-next head; return tail; } int ysf(int n, int m ) { ListNode* prev buycircle(n); ListNode* pcur prev-next; int count 1; //当pcur的下一个元素是自己时说明循环链表中只有这一个元素了 while(pcur-next ! pcur) { //删除元素 if(count m) { prev-next pcur-next; free(pcur); pcur prev-next; count 1; //将count重新赋值为1 } else { prev pcur; pcur pcur-next; count; } } return pcur-val; }6力扣--分割链表题目解法思路下面采用思路3进行实现代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ListNode; struct ListNode* partition(struct ListNode* head, int x) { //判空 if(head NULL) { return head; } //创建两个单链表 ListNode *lesshead,*lesstail; ListNode *greathead,*greattail; lesshead lesstail (ListNode*)malloc(sizeof(ListNode)); //接收小于x的值 greathead greattail (ListNode*)malloc(sizeof(ListNode));//接收大于或等于x的值 //遍历原链表 ListNode* pcur head; while(pcur) { //插入小链表 if(pcur-val x) { lesstail-next pcur; lesstail lesstail-next; } //插入大链表 else { greattail-next pcur; greattail greattail-next; } pcur pcur-next; } //修改大链表的尾节点的next的指向 greattail-next NULL;//如果不加这一行就会出现死循环 //大小链表进行连接 lesstail-next greathead-next; return lesshead-next; }可能出现的问题未添加:greattail-next NULL;导致以下情况的死循环由于大链表中的5的下一个节点在原链表恰好是小链表中的元素2导致循环时5的下一个节点又跳转到了小链表中的2导致无限循环死循环

相关文章:

详解单链表(含链表的实现过程)

目录 一,介绍单链表 二,顺序表和单链表的比较 三,单链表的实现 四,单链表例题实例 ​​​​1,力扣--203,移除链表元素 2,力扣--206.反转链表 3,力扣--876,链表的中间节点 4,力扣--21,合…...

《QGIS快速入门与应用基础》221:项目面板:布局元素管理

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

高压下的自我怀疑:当“我的实力配不上经历”成为内心独白,我们该如何理性应对与战略抉择?

高压下的自我怀疑:当“我的实力配不上经历”成为内心独白,我们该如何理性应对与战略抉择? 摘要:在职场、学业、创业或人生重大转折期,高压环境常常诱发一种深层的自我怀疑:“是不是我的能力根本配不上我现在…...

UEC++Part4--UObject、UgameInstance、actor组件、静态加载

一、补充1、ExposeOnSpawnUPROPERTY(EditAnwhere,BlueprintReadWrite,meta(ExposeOnSpawn"ExposeOnSpawnValue")) int32 health;在生成这个对象时会有一个初始值可以设置,类似游戏创建角色时可以调整角色的捏脸数值2、:public FTableRowBaseUSTRUCT(Bluep…...

结构体——结构体基本用法,结构体初始化

存储数据时如果需要存储多个数据,我们可以使用数组。而如果同时需要存储多种数据,可以采用结构体的方式存储。用结构体的方式定义的数据类型是一种构造数据类型(抽象数据类型),是由各种的基本数据类型组成的。结构体弥…...

2026年Python开发工程师常见面试选择题

1. 关于 Python 中 list 和 tuple 的说法,正确的是? A. list 不可变,tuple 可变 B. list...

探秘电动汽车VCU与BMS的HIL仿真:从代码到实车的桥梁

电动汽车VCU hil BMS hil硬件在环仿真 其中包含新能源电动汽车整车建模说明, hil模型包含驾驶员模块,仪表模块,BCU整车控制器模块,MCU电机模块,TCU变速箱模块,减速器模块,BMS电池管理模块&#…...

C#自定义控件结合OpencvSharp实现斑点检测

C# 自定义控件 opencvsharp 斑点检测blob最近在做一个图像处理相关的项目,需要实时检测图片中的斑点,同时要求能够方便地在WinForms界面中展示和操作。经过一番调研和实践,决定采用C#自定义控件结合OpencvSharp来实现。这组合不仅充分发挥…...

AUKF电池SOC估计多种工况实验验证 基于自适应无迹卡尔曼滤波的电池电量估计MATLAB程序

AUKF电池SOC估计多种工况实验验证 基于自适应无迹卡尔曼滤波的电池电量估计MATLAB程序,基于AUKF的SOC估计,注释详细。 采用二阶RC模型,基于误差窗口统计的自适应调节方法(后面有文献截图)。 使用三项实验数据对AUKF进行…...

C#编程实现自定义控件与OpenCVsharp的图像处理技术,快速精确地找出圆的位置

C# 自定义控件 opencvsharp 找圆最近在做个工业视觉检测项目时,发现WinForm自带的PictureBox控件完全不够用。客户要求实时显示摄像头画面还要标出圆形瑕疵,这逼得我不得不撸起袖子造轮子——用C#自定义控件整合OpenCvSharp实现找圆功能。先搞个基础画…...

Maven 从零到精通实战专栏导读 - 24 篇系统教程助你成为团队核心

🚀 Maven 从零到精通实战专栏导读 - 24 篇系统教程助你成为团队核心 💡 摘要: 本文详细介绍全网最系统的 Maven 实战专栏,共 24 篇精品文章、25,000 行干货。从基础优化到企业级应用,从性能提升 60% 到 CI/CD 流水线搭建&#xff…...

0620-输液控制(固定阀值)-系统设计(51+1602+AD0832+U2003+KEY4)

功能描述 1、采用51单片机作为主控芯片; 2、采用光电传感器检测点滴滴速; 3、通过电机调整吊瓶高度以控制滴速; 4、当液位小于3cm时进行报警; 5、采用1602显示当前滴速、设置滴速、液位; 电路设计 采用Altium Desig…...

COMSOL 模型:局部共振压电超材料如何调谐水下低频吸声

COMSOL模型局部共振压电超材料调谐水下低频吸声在水下声学领域,低频噪声的控制一直是个重要的课题。局部共振压电超材料为水下低频吸声提供了一种新颖且极具潜力的解决方案。借助 COMSOL 强大的多物理场仿真能力,我们能够深入探究这一材料的吸声机制&…...

探索Comsol中高温金属熔化分解两相流模型

Comsol两相流模型,高温下的金属(固体)熔化分解过程,考虑汽化和液化,水平集,相变模型在材料科学与热物理领域,研究高温下金属的熔化分解过程至关重要。借助Comsol这一强大的多物理场仿真软件&…...

Python批量转换Word到PDF,新手直接复制运行【实测可用】

日常工作中,经常需要将多个Word文件批量转换为PDF(比如归档、汇报、传输),手动逐个“另存为”不仅耗时,还容易遗漏、出错。今天分享一段实测可用的Python代码,基于windows调用Word原生程序转换,…...

计算机毕业设计源码:python二手房数据挖掘与可视化系统 Django框架 可视化 Requests爬虫 房屋 房子 房源 数据分析 (建议收藏)✅

1、项目介绍 技术栈 Django框架、Echarts可视化工具、requests爬虫框架、HTML前端技术、Bootstrap响应式布局,用于全国二手房数据的采集清洗与多维度可视化分析,房源数据量达175万套。 功能模块系统首页数据总览数据可视化分析1(城市房…...

解决银河麒麟无SRS安装包的痛点:自己动手丰衣足食,rpm打包指南

大家好,最近在搞国产化适配,项目在银河麒麟高级服务器系统上,需要部署 SRS 做流媒体分发。 本来想着 yum install -y srs 一把梭,结果你懂的,官方源里压根没有,网上倒是有几个 SRPM 包,但版本老…...

计算机毕业设计源码:python房产大数据可视化分析平台 Django框架 可视化 Requests爬虫 房屋 房子 房源 数据分析 (建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...

计算机毕业设计源码:python二手房市场数据可视化系统 Django框架 可视化 Requests爬虫 房屋 房子 房源 数据分析 (建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

计算机毕业设计源码:python链家二手房数据采集分析平台 Django框架 可视化 Requests爬虫 房屋 房子 房源 数据分析 (建议收藏)✅

博主介绍:✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

【2026年滴滴春招- 3月15日 -第二题- 开心食堂】(题目+思路+JavaC++Python解析+在线测试)

题目内容 你开了一家食堂。新的一天的营业从第 000 时刻开始,这一天食堂将迎来 nnn 个顾客,其中第 iii</...

搭建调度中心->XXL_JOB

XXL-JOB 是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 1.克隆代码 使用 IDEA &#xff0c;从码云 https://gitee.com/xuxueli0323/xxl-job 克隆源码。从码云克隆的原因是&#xff0c;速度比较快。 克隆完成后&#xff0…...

【2026年拼多多春招- 3月15日 -第三题- 多多的配送轨迹】(题目+思路+JavaC++Python解析+在线测试)

题目内容 多多正在检查一段配送轨迹日志。日志长度为nnn,从起点(0,0)(0,0)(0,0)出发,按顺序记录了每一步移动指令。日志是一个长度为...

功率分流混联式混合动力车辆热管理建模与性能计算分析,对标丰田混合动力EVT构型,利用Simul...

功率分流混联式混合动力车辆热管理建模与性能计算分析&#xff0c;对标丰田混合动力EVT构型&#xff0c;利用Simulink建模&#xff0c;采用成熟软件架构&#xff0c;考虑驾驶乘员舱产热与空调调节系统&#xff0c;发动机产热建模与热管理系统&#xff0c;电动产热模型&#xff…...

机器视觉学习总结

一、视觉行业引入机器视觉是传感器技术的一个重要分支&#xff0c;其核心在于利用机器系统替代人眼和大脑进行测量与判断&#xff0c;实现非接触式的自动化检测。从技术本质上讲&#xff0c;机器视觉通过光 学装置和非接触传感器接收和处理真实物体的图像&#xff0c;从而获取所…...

SWD/JTAG Communication Failure的解决方法

以下是我的设备及环境。环境配置&#xff1a;1.keil已下载安装2.芯片pack包已导入3.下载安装NsLink调试器已完成4.CMSIS-DAP驱动已装好有几种解决方法&#xff1a;1.debug设置是否正确&#xff0c;我需要通过Debug USB进行烧录&#xff0c;所以debug设置选择CMSIS-DAP-NSLink&a…...

从实验室到生产线:YOLOv11多任务统一框架(检测+分割+姿态估计)行业应用

前言 “产线上需要同时检测零件缺陷、分割裂纹区域、还要估算机械臂抓取姿态,结果部署了三套不同的模型(YOLOv8, Mask R-CNN, HRNet),显存爆满,延迟叠加,系统根本跑不动?” “算法团队在实验室刷榜mAP很开心,但工程团队面对三个模型的同步、对齐、后处理冲突,头发都掉…...

YOLO26实战全流程:从数据集标注到端到端无NMS推理(附ProgLoss调参技巧)

前言 “训练YOLO模型,调参调到头秃,mAP还是卡在瓶颈上不去?” “部署时NMS后处理耗时占比30%,边缘设备上根本跑不满帧率?” “小目标检测一直是弱项,无论怎么调整Anchor或增加层数,漏检率依然居高不下?” 2026年1月,Ultralytics正式发布了YOLO26,这不仅仅是一次版本号…...

YOLOv8.3.133工业级实战:OpenVINO导出优化+Intel CPU推理,帧率突破120FPS

前言 “工厂产线只有Intel CPU工控机,没有独立显卡,跑YOLOv8只有15 FPS,根本跟不上流水线速度?” “想部署到边缘端,但NVIDIA Jetson成本太高,希望利用现有的Intel Core i7/i9或Xeon服务器资源?” “导出ONNX后推理还是慢,量化精度损失太大,业务方无法接受漏检?” 在…...

Vllm快速入门

背景 vLLM 是一个用于 LLM 推理和服务的快速易用的库。 vLLM 最初是在加州大学伯克利分校的 Sky Computing Lab 开发的&#xff0c;现已发展成为一个社区驱动的项目&#xff0c;融合了学术界和工业界的贡献。 核心细节参考官网&#xff1a;https://docs.vllm.com.cn/en/late…...