双向链表(2)

尾插函数

测试

判空(判断链表是否为空)

获取数据结点的个数

测试

在链表plsit中 查找第一个key值,找到返回key值的结点地址,没有找到返回空NULL

删除第一个val的值

前面的链表操作删除第一个val值时,通常调用返回key的前驱下标

但在双向链表里面,前驱已经用prio保存了(在找到Search的结点里面的prio),所以不用调用函数了

之前链表删除,是一句穿透,现在要两句穿透——

将第一行中的300(p->prio->next)改成200(p->next),

第二行中的300(p->next->prio)改成500(p->prio)

同理,写多级指针时,必须要判断一下是否为空(有空则会崩溃),

上句中的p->next就有可能为空(p为最后一个末尾结点时)

这时只执行第一句话就可以了,200变成NULL,第一条链就断了;

虽然第二条链没断,但在free(p)之后,整个结点p都没了,此时第二条链自然就断了

所以第二句话不用写,

p->prio则不可能为空,因为它最多可能在下图中的位置,prio也是plist的位置100

最后,删除中,在穿透之后就必须free释放

测试

返回key的前驱地址,如果不存在(key无前驱,在表头)返回NULL

//返回key的后继下标,如果不存在(key无后继,在表尾)返回NULL

清空链表中的数据

跟前面链表一样,调用销毁函数就行了

销毁整个链表内存(交回)

销毁函数跟前面链表的销毁是一模一样的,也是只穿透删除第一条线,没有写第二条线

这是因为上面第一条线已经把表连接起来了,并且穿透一个结点紧接着就free释放这个结点

所以第二条线可以处理,也可以不处理,

但一般情况下为了简洁高效就不处理第二条线,就像扔垃圾前不用洗垃圾一样

测试

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值