C++数据结构_链表的删替插装功能实现2(更新中)【7】
链表的基本功能
水激石则鸣,人激志则宏。——秋瑾
1 . 基于上次写的学生管理链表,我做了一定的修改,把结构体的名称和数据域的名称修改了所以会和上次的不一样。
2 . 这次我们来继续完善链表中欠缺的功能,比如:替换
,插入
,删除
,封装
等……
3 .若搞不清代码,可参考上期的博客:C++数据结构_单链表的实例剖析与应用1【6】
替换函数
分析
1 . 替换功能还是比较简单的。
2 .开始我是想到了两种方法,一种是将整个节点替换成新的,一种是将节点的中的数据域换成新的。但目前只实践了第二种方法,个人觉得还是很直白易懂的,第一种方法也可以用,但需要先使用delete删除实例化的节点,在重新赋值,
3 . 这里说一下整个实践过程:首先是找到这个要替换的节点,可以以数据域中的某一个数据为参照物,使用while循环来查找匹配,当匹配到了,就直接给该节点的数据域赋一个新值,还有一种情况,就是当头节点就是要被替换的节点,这种就直接使用if判断一下,是则直接替换头节点的数据域。
4 . 下面的图片应该会更加直白,这就相当于直接换了一个节点的数据域嘛。
代码实现与解析
1 . 多说无益,直接上代码。
2 . 创建一个函数ReplaceLinkNode()
,oidName
为要被替换节点的参照物,newAge
和newName
为要替换的新值。
3 . 使用if判断一下头节点是不是要替换的节点
。如果是,则直接直接将指针指向头节点的数据域
,并赋予新的值替换掉,如果不是,则从头节点开始循环
查找,直到找到为止并替换。
4 . 这里存在一个新的可能性
:就是当链表不存在要找的节点参照物。这种情况都是在循环到达最后一个节点的时候发生的,我们只需要写个判断if(FindOut->Pointer_Next == nullptr),意思是访问最后一个节点的指针域是否为nullptr,是则输出“不存在目标”。
1 | void ReplaceLinkNode(string oidName, int newAge, string newName) |
5 . 以上是替换节点的操作,也不能完全说是替换节点吧,只是把数据域替换了。