OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2077|回复: 4

求助:这个程序怎么解读??????

[复制链接]

6

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2018-6-16
在线时间
31 小时
发表于 2018-6-29 10:42:08 | 显示全部楼层 |阅读模式
//删除一个SMS节点
//head:表头
//i:要删除的节点号,0,表示表头(表头不能用该函数删除)
//返回值:0,删除成功
//    其他,删除失败/错误
u8 sms_node_delete(sms_node* head,u16 i)
{
        u16 j;
        sms_node *p,*p1=0;
        if(i==0)return 1;
        p=head;
        for(j=0;j<i&&p->next!=NULL;j++)
        {
                p1=p;
                p=p->next;
        }
        if(p==NULL||p1==NULL)return 2;//不存在的节点
        p1->next=p->next;        //更改前一个节点的指向
        sms_node_free(p,1);        //释放节点内存
        return 0;//删除成功       
}       

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2016-7-30
在线时间
82 小时
发表于 2018-6-29 11:38:27 | 显示全部楼层
遍寻整个链表,if(p==NULL||p1==NULL) 这里感觉只需判断if(p==NULL)就好了,找到要删除的节点(当前地址p处的节点), p1->next=p->next, 把上一节点直接指向下一节点就ok了,愚见
回复 支持 1 反对 0

使用道具 举报

6

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2018-6-16
在线时间
31 小时
 楼主| 发表于 2018-6-29 12:37:00 | 显示全部楼层
rmrmrm 发表于 2018-6-29 11:38
遍寻整个链表,if(p==NULL||p1==NULL) 这里感觉只需判断if(p==NULL)就好了,找到要删除的节点(当前地址p ...

p1=p;p=p->next;这两个语句是什么意思????
回复 支持 反对

使用道具 举报

5

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2016-7-30
在线时间
82 小时
发表于 2018-6-29 13:41:55 | 显示全部楼层
云云嘟p9iGv 发表于 2018-6-29 12:37
p1=p;p=p->next;这两个语句是什么意思????

最初 p是指向头节点的 ,然后for循环里面执行一次循环,p就指向了第一个节点,p1指向头节点,以此类推,当循环n次后,p就指到了你要找的第n个节点,p1指向n之前一个节点
回复 支持 反对

使用道具 举报

6

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2018-6-16
在线时间
31 小时
 楼主| 发表于 2018-6-29 17:53:23 | 显示全部楼层
rmrmrm 发表于 2018-6-29 13:41
最初 p是指向头节点的 ,然后for循环里面执行一次循环,p就指向了第一个节点,p1指向头节点,以此类推, ...

多谢,大神
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 11:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表