精讲双向链表的销毁

news2024/11/26 22:29:28

相信大家各位学习双向链表的时候对链表的销毁,都或多或少有些小疑惑,我到底是传一级指针还是传二级指针

木关系,这些都是小意思,今天我将为大家share 一下关于到底如何进行正确传指针

对于链表是销毁其实就是对链表进行一个结点一个结点的删除

注意,最后不要忘了还需要对哨兵位(phead)进行free

方法一:传一级指针

void Destroy(ListNode* phead)//链表销毁;想一下,传一级指针还是二级?  在这里我们传入一级指针,为了保持接口一致性
{
	//销毁我们是一个一个进行删除,自然就需要遍历
	assert(phead);
	ListNode* del = phead->next;
	while (del != phead)
	{
		ListNode* next = del->next;
		free(del);
		/*del = NULL;*/    //  ?
		del = next;
	}
	//来到这说明,此时只有一个哨兵位
	free(phead);
	phead = NULL;

}

调试结果如下:

显而易见,当我们把哨兵位这个结点进行free的之后,他确实是为空了但是此时我们的plist这个结点并没有置空,这是为什么呢???

 函数的形参是对实参的一份临时拷贝,对形参的临时修改并不会影响实参的变化

因此有时我们就需要传地址来进行

 我们不妨试一下,我们手动把plist这给结点进行free

结果如下:

 报错显示:无效的堆上的指针。换言之就是我们已经把plist这个结点进行free了,无需在进行一次free了,所以在传一级指针时,我们只需手动把plist 这个结点进行置为空即可

 方法2:传二级指针

代码如下;

void LTDestroy(ListNode** pphead) 
{
		assert(pphead && *pphead);//确保我们头节点地址以及哨兵位职工地址有效
		ListNode* cur = (*pphead)->next;
		while ( cur!=*pphead )
		{
			ListNode* next = cur->next;
			free(cur);
			cur = next;
		}
		free(*pphead);//对哨兵位进行释放
		*pphead = NULL;
	}

 调试结果如下:

显然此时plist这个指针是置空了

  但是当我们把自己所写的代码交给用户使用的时候,或许存在一些小问题

我们用户是很懵的,因为他不知道自己要什么时候传二级指针,什么时候传一级指针;其次为了保持接口一致性,我们还是传一级指针就Ok~~~

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

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

相关文章

基于PHP的大学生考勤请假管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Jupyter Notebook还有魔术命令?太好使了

在Jupyter Notebooks中,Magic commands(以下简称魔术命令)是一组便捷的功能,旨在解决数据分析中的一些常见问题,可以使用%lsmagic 命令查看所有可用的魔术命令 插播,更多文字总结指南实用工具科技前沿动态…

【赠书活动】从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

yum源安装报错问题解决

如果出现以下错误 解决方案 CentOS 8 yum安装软件时,提示无法从AppStream下载 检查网通不通,然后确定DNS解析是否正确。 ping www.baidu.com有可能是所在网络环境在出口封了相应端口,需用其他方式,比如VPN解决。 我们无法使用C…

Element 多个Form表单 同时验证

一、背景 在一个页面中需要实现两个Form表单,并在页面提交时需要对两个Form表单进行校验,两个表单都校验成功时才能提交 所用技术栈:Vue2Element UI 二、实现效果 三、多个表单验证 注意项: 两个form表单,每个表单上…

tomcat9~10猫闪退个人经验

java版本17与8 8版本有jre,java17没有jre 所以在java8版本中将jre和jdk路径一同添加环境是不会出现闪退的,tomcat9没有闪退 但是在10就闪退了,因为java版本太低 java17没有jre,但是可以通过一种方法添加jre到java17的目录 完…

【技术综述】深度学习模型结构复杂、参数众多,如何更直观地深入理解你的模型?...

CNN、RNN等深度学习模型使用的门槛虽然低,但模型参数多,网络结构复杂。输出如何关联模型的参数,在数学上没有很直观的解释,导致模型网络结构的设计以及训练过程中超参数的调试,都非常依赖于经验。结果不好,…

【鸿蒙软件开发】Stage模型开发概述应用/组件级配置

文章目录 前言一、基本概念1.1 UIAbility 组件1.2 ExtensionAbility 组件1.3 Context1.4 AbilityStage1.5 Stage模型开发流程应用组件开发了解进程模型了解线程模型应用配置文件 二、Stage模型应用/组件级配置2.1 为什么需要这个操作2.2 应用包名配置2.3 应用图标和标签配置2.4…

linux-磁盘应用

目录 一、磁盘内容简述 1、一些基本概念 2、分区简述 3、常见文件系统 4、linux硬盘文件 二、对linux系统进行分区 1、用fdisk进行分区 2、用parted进行分区 一、磁盘内容简述 1、一些基本概念 - 扇区大小:512Btyes,0.5KB - 磁盘最小存储单位&…

黑猪肉经营配送商城小程序商城效果怎样

对产品商家来说,如今线下流量匮乏难以增长,线上已经成为商家们重要的经营渠道,但入驻第三方平台也存在诸多痛点,因此更多企业品牌商家选择自建私域卖货平台完善更多生意。 微信作为私域主阵地,自然是企业们不可错过的…

Java面向对象(进阶)-- 拼电商客户管理系统(康师傅)

文章目录 一、目标二、需求说明(1)主菜单(2)添加客户(3)修改客户(4)删除客户(5)客户列表 三、软件设计结构四、类的设计(1)Customer类…

79 电话号码的字母组合

电话号码的字母组合 题解1 回溯比较直观的理解 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入…

每日一题 274. H 指数(中等)

先讲一下自己的复杂的写法 第一眼最大最小值问题,直接在0和最大被引次数之间二分找答案先排序,再二分,,, 正解: 排序得到 citations 的递减序列,通过递增下标 i 遍历该序列显然只要排序后的 …

【教3妹学编程-java实战5】结构体字段赋值的几种方式

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 2哥 :3妹,考考你,你知道java结…

【SPSS】基于RFM+Kmeans聚类的客户分群分析(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Python学习笔记--初始化函数

六、初始化函数 1、什么是初始化函数 初始化函数的意思是,当你创建一个实例的时候,这个函数就会被调用。 比如: 当代码在执行 a ClassA() 的语句时,就自动调用了 __init__(self) 函数。 而这个 __init__(self) 函数就是初始化…

精通Linux系列第四章:Linux常用命令入门

文章目录 一、前言二、命令行介绍2.1 Shell概述2.2 命令行提示符2.3 命令行快捷键2.4 命令行历史和命令补全 三、基本命令3.1 ls - 列出文件和目录3.2 cd - 切换目录3.3 pwd - 显示当前工作目录3.4 mkdir - 创建目录3.5 rm - 删除文件和目录3.6 cp - 复制文件和目录3.7 mv - 移…

好题分享(2023.10.22——2023.10.28)

目录 ​编辑 前言: 题目一:《消失的数字》 1.先排序再遍历 2.异或 3.等差数列求和,再相减 题目二:《轮转数组》 1.开辟新的数组 2.原地逆序 题目三:《移除元素》 题目四:《删除有序数组的重复项…

【Java每日一题】——第四十三题:USB接口程序设计。(2023.10.29)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

拉扎维模拟CMOS集成电路设计西交张鸿老师课程P2~5视频学习记录

目录 p2 p3 p4 p5 --------------------------------------------------------------------------------------------------------------------------------- p2 -----------------------------------------------------------------------------------------------------…