单链表进阶

news2024/11/24 14:30:31

之前已经介绍过单链表及其一些简单的功能

这次来简单介绍单链表一些的其他接口

1.在指定位置之前插入数据

具体原码,三个参数,phead是链表的指针,pos是节点的地址,x是需要插入的数据。

pos不能为空指针,因为pos为空指针我们就无法插入了,其次是phead和*phead也不能是空指针,*phead是空链表就无法从其中一个链表之前插入数据了。然后通过BuyNode得到要插入的数据的地址,用tmp来接收,然后考虑如果pos 是头结点的话,直接让pos的next等于链表地址,然后再让链表地址等于pos的地址,这样就完成插入了。

如果pos不是头节点的话就进入else,首先定义一个pcur指针,通过循环,当pcur的next不是pos就一直向后走,直到pcur的next是pos时,此时就退出循环,先将pos插入tmp上,再将tmp插入到pcur-next就可以了,然后达到了指定数据前插入数据的效果。

2.在指定数据之后插入数据

在指定数据之后插入数据有两种思路,第一种是先将plist->next等于newnode再将后面数据拼到newnode后面,第二种是直接将pos后面数据插入到newnode然后再将newnode插入到pos->next上。想一下,这两种哪种不可行,仔细一想,第一种是不可行的,为什么呢,因为当把pos->的数据存储newnode时,此时后面的数据就找不到了啊。但是也不是不可解决的, 我们可以用一个临时指针来存储后面那个地址,这样就可以找到后面的地址。

源代码

这个代码就很简单就不简述了。

3.删除节点

要删除节点,首先能肯定的是*phead和phead不能为空指针,其次pos也不能为空指针,因为pos如果为空的话就没必要删除了,源代码

void SLTErase(SLTNode** phead, SLTNode* pos)
{
	assert(phead, *phead);
	assert(pos);
	if (*phead == pos)
	{
		SLTPopFront(phead);
	}
	else
	{
		SLTNode* ptail = *phead;
		while (ptail->next != pos) 
		{
			ptail = ptail->next;
		}
		ptail->next = pos->next;
		free(pos);
		pos = NULL;
	}
}

4.删除pos之后的节点

        

删除pos之后的数据不用修改链表,只用把pos的next的next的值存放到pos的next上就行,用临时指针来接收pos—>next,然后销毁这个数据的空间即可。

void SLTEraseAfter(SLTNode* pos)
{

	assert(pos);
	SLTNode* tmp = pos->next;
	pos->next = tmp->next;
	free(tmp);
	tmp = NULL;	
		
}

5.销毁链表

销毁链表需要将链表的每一个数据都要进行销毁,首先要保证phead和*phead都不是空指针。

然后通过一个循环来遍历链表,先定义while循环,然后循环终止的条件是链表走到NULL了,此时就可以退出循环了,先定义一个pcur来接收*phead,条件就为pcur,先进入循环,定义一个中间指针,next,然后释放pcur再让pcur指向中间指针的地址,通过这个循环,就可以释放所有的链表数据,最后将链表置为空,这样就实现了链表的释放。

void SLTDestory(SLTNode** phead)
{
	assert(phead && *phead);
	SLTNode* pcur = *phead;
	while (pcur)
	{
		SLTNode* next = pcur - next;
		free(pcur);
		pcur = next;
		
	}
	*phead = NULL;
}

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

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

相关文章

React启动时 Error: error:0308010C:digital envelope routines::unsupported

错误信息: 错误原因:通常与 Node.js 的新版本中 OpenSSL 的默认行为变化有关。从 Node.js 17 开始,OpenSSL 默认启用了 OpenSSL 3.0 的一些新特性,这可能会影响到一些旧的或未更新的库。 解决办法:可以通过设置环境变…

基于STM32设计的室内育苗环境管理系统(物联网)

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】ESP8266-WIFI模块【2】MQ135传感器【4】DHT11传感器【5】B1750传感器 …

【Diffusion分割】FDiff-Fusion:基于模糊学习的去噪扩散融合网络

FDiff-Fusion: Denoising diffusion fusion network based on fuzzy learning for 3D medical image segmentation 摘要: 近年来,去噪扩散模型在图像分割建模中取得了令人瞩目的成就。凭借其强大的非线性建模能力和优越的泛化性能,去噪扩散模…

Flexus X实例全方位指南:智能迁移、跨云搬迁加速与虚机热变配能力的最佳实践

目录 前言 一、云迁移关键挑战 1、企业实例选型关键挑战 2、云算力关键挑战之一 3、云算力关键挑战之二 二、本地IT及其他云搬迁到Flexus X实例上的独有优势 1、Flexus X实例超强性能,遥遥领先同规格友商实例 (1)底层多重调优&#x…

网络编程——TCP网络通信

通信步骤: 1、连接 2、传输数据 3、关闭连接服务端的创建流程: 1、创建服务端socket对象 socket_family:网络地址类型AF_INET--代表的是ipv4地址类型 socket_type:套接字类型SOCK_STREAM--代表的是tcp套接字SOCK_DGRAM--代表的是udp套接字 2、绑定自己的…

新房安装了约克VRF中央空调真的是明智的选择!

夏天越来越热,新房安装了中央空调真的是太明智了!当初装修时,考虑到家里空间大,我就决定装一个中央空调。对比了好多品牌后,朋友推荐了约克VRF中央空调。装好以后,简直惊喜不断!      强效除…

基于SpringBoot+Vue+MySQL的美食点餐管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 在数字化快速发展的今天,餐饮行业也迎来了转型升级的重要机遇。传统餐饮管理方式面临效率低下、顾客体验不佳等问题。为此,开发一款基于SpringBootVueMySQL架构的美食点餐管理系统显得尤为重要。该系统旨…

【Qualcomm】高通SNPE框架简介、下载与使用

目录 一 高通SNPE框架 1 SNPE简介 2 QNN与SNPE 3 Capabilities 4 工作流程 二 SNPE的安装与使用 1 下载 2 Setup 3 SNPE的使用概述 一 高通SNPE框架 1 SNPE简介 SNPE(Snapdragon Neural Processing Engine),是高通公司推出的面向移…

Leetcode尊享面试100题-252.会议室

给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。 示例 1: 输入:intervals [[0,30],[5,10],[15,20]] 输出&#xff…

记录Mac编译Android源码踩过的坑

学习Android源码,如果电脑配置还不错,最好还是下载一套源码,经过编译后导入到Android Studio中来学习,这样会更加的直观,代码之间的跳转查看会更加方便。因此,笔者决定下载并编译一套源码,以利于…

【C++算法】链表

知识总结 常用技术: 1.画图!!——>直观形象便于理解 2.引入虚拟”头结点“ 便于处理边界情况方便对链表操作 3.不要吝啬空间,大胆定义变量 4.快慢双指针——判环、找链表中环的入口、找链表中倒数第n个节点 链表中的常用…

电力领域大模型

2023年12月,arXiv预印本平台发表了一篇题为"Large Foundation Models for Power Systems"的研究论文。该文系统探讨了大型基础模型如大型语言模型(LLMs)在电力系统建模和运行中的应用前景。研究重点关注了大型基础模型在最优潮流计…

php+mysql安装

1.卸载mysql 没启动不停止 2.下载 3.解压 4.点击安装 5.出现成功 端口占用修改 修改端口89或者87 可视化扩展 修改后重启 开启扩展

consul注册中心与容器自动发现实战

consul简介 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等&#xff0…

springboot快速开发平台使用达梦数据库

1.首先来到DM管理工具 大致流程是:创建表空间(用于给新建的用户使用)-》创建用户(绑定表空间) 文件位置 2.创建用户 来到所属角色页面,第一个权限管理员一定要勾上,其他的看情况 3.来到DM数…

9.24每日作业

1> 思维导图 2> 将昨天的My_string类中的所有能重载的运算符全部进行重载 、[] 、>、、>) 3> 仿照stack类实现my_stack,实现一个栈的操作 text.h #ifndef LIST_H #define LIST_H #include <iostream> #include <string.h>using namespace std;…

Java项目: 基于SpringBoot+mybatis+maven医疗病历交互系统(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven医疗病历交互系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简…

力扣 简单 206.反转链表

文章目录 题目介绍题解 题目介绍 题解 法一&#xff1a;双指针 在遍历链表时&#xff0c;将当前节点的 next 改为指向前一个节点。由于节点没有引用其前一个节点&#xff0c;因此必须事先存储其前一个节点。在更改引用之前&#xff0c;还需要存储后一个节点。最后返回新的头引…

不靠学历,不拼年资,怎么才能月入2W?

之前统计局发布了《2023年城镇单位就业人员年平均工资情况》&#xff0c;2023年全国城镇非私营单位和私营单位就业人员年平均工资分别为120698元和68340元。也就是说在去年非私营单位就业人员平均月薪1W&#xff0c;而私营单位就业人员平均月薪只有5.7K左右。 图源&#xff1a;…

1. 值、类型与运算符

在计算机的世界里&#xff0c;只有数据。你可以读取数据、修改数据、创建新数据&#xff0c;但不能提及非数据的内容。所有这些数据都存储为长位序列&#xff0c;因此本质上是相似的。 位&#xff08;比特&#xff09;是任何类型的二值事物&#xff0c;通常被描述为0和1。在计算…