数据结构和算法-单链表的删除|学习笔记

简介: 快速学习数据结构和算法-单链表的删除

开发者学堂课程【Go 语言核心编程 - 数据结构和算法:数据结构和算法-单链表的删除】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/627/detail/9838


数据结构和算法-单链表的删除


 内容简介:

一、代码实现

二、代码说明

三、代码运行及修改

 

一、代码实现

(1)前言

现在演示删除的功能删除就是你给我一个 ID ,然后就到里去找,找的时候仍然要遵循原则,即在找的时候,依然要让 temp 跟下一个 ID 比较,因为如果不下一个比较,即使找到了也没什么用。

链表取,想想怎么去,如果有一个从队列尾部插入,还有一个从链表的头插入去取,其实就是一个非常经典的链表,而且这个比原先更好读,那么我们来写一个案例叫删除。

(2)代码实现

首先打开 VSCode ,找到 chapter20/singlelink/main.go ,在它的基础上进行添加删除的功能,添加的代码如下:

//删除一个结点

func DelHeroNode(head *HeroNode, id int) {

temp := head

flag := false

//找到要删除结点的 no ,和 temp 的下一个结点的 no 比较

for {

if temp.next == nil {//说明到链表的最后

break

} else if temp.next.no == id {

//说明我们找到了

flag = true

break

}

temp = temp.next

} 

if flag {//找到,删除

temp.next = temp.next.next

} else {

fmt.Println(sorry, 要删除的id不存在)

}

再将最后的部分修改为:

func main() {

//1.先创建一个头结点,

head := &HeroNode{}

//2.创建一个新的 HeroNode

hero1 := &HeroNode{

no : 1,

name : 宋江,

nickname : “及时雨”,

}

hero2 := &HeroNode{

no : 2,

name : 卢俊义,

nickname : “玉麒麟”,

}

hero3 := &HeroNode{

no : 3,

name : 林冲,

nickname : “豹子头”,

}

//3.加入

InsertHeroNode2(head,hero3)

InsertHeroNode2(head,hero1)

InsertHeroNode2(head,hero2)

//4.显示

ListHeroNode(head)

//5.删除

fmt.Println()

DelHeroNode(head, 2)

ListHeroNode(head)

}

 

二、代码说明

说明①:如果这个 flag 为真,就说明确实找到了,如果找到了就删除,那删除怎么删除?

对与下图而言,比如在这个过程中,找到的是二号,那么要删除二号的话,现在temp是在第一个结点,要删除其实很简单,只需要让 temp 的下一个结点指向下一个结点,那如果这样的有什么好处是什么?

当结点在遍历的时候,这个结点就会被抛弃,那会变成什么结点?

会变成一个垃圾结点,可能会想为什么它不是垃圾,它不指向跟别人,因为它指向别人没有用,只有当别人指向它才会有用,所以说这个结点就会被当成垃圾,然后回收器销毁。

具体参考下图:

image.png

三、代码运行及修改

(1)运行初代码

将以上代码保存并运行,运行结果如下:

D:\goproject\src\go_code\chapter20\singlelink>go run main.go

[1 ,宋江,及时雨1==>[2,卢俊义,玉麒麟]==>[3,林冲,豹子头1==>

[1 ,宋江,及时雨1==>[3,林冲,豹子头1==>

(2)删除功能

如果要显示删除1,只需将最后的部分修改为: 

//5.删除

fmt.Println()

DelHeroNode(head, 1)

ListHeroNode(head)

保存后并运行,运行结果如下:

D:\goproject\src\go_code\chapter20\singlelink>go run main.go

[1 ,宋江,及时雨1==>[2,卢俊义,玉麒麟]==>[3,林冲,豹子头1==>

[2,卢俊义,玉麒麟]==>[3,林冲,豹子头1==>

(3)删除1和3功能

如果要显示删除1和3,只需将最后的部分修改为:

//5.删除

fmt.Println()

DelHeroNode(head, 1)

DelHeroNode(head, 3)

ListHeroNode(head)

D:\goproject\src\go_code\chapter20\singlelink>go run main.go

[1 ,宋江,及时雨1==>[2,卢俊义,玉麒麟]==>[3,林冲,豹子头1==>

[2,卢俊义,玉麒麟]==>

相关文章
|
23天前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
83 29
|
23天前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
88 25
|
23天前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
64 23
|
1月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
46 5
|
2天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
78 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
11天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
7天前
|
算法
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
|
7天前
|
算法 安全 机器人
基于包围盒的机械臂防碰撞算法matlab仿真
基于包围盒的机械臂防碰撞算法通过构建包围盒来近似表示机械臂及其环境中各实体的空间占用,检测包围盒是否相交以预判并规避潜在碰撞风险。该算法适用于复杂结构对象,通过细分目标对象并逐级检测,确保操作安全。系统采用MATLAB2022a开发,仿真结果显示其有效性。此技术广泛应用于机器人运动规划与控制领域,确保机器人在复杂环境中的安全作业。
|
7天前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。
|
10天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。

热门文章

最新文章