c++删除指针方法,看看哪里不对?
时间:2011-12-04
来源:互联网
程序实现:stu是定义的结构体,array是定义的数组,如果发现指针域和array相同就删除指针,这样写有什么错误,求赐教
//删除
void del(stu* H,char array[])
{
stu *P,*P1,*P2;
P = H;
while(P)
{ if(strcmp(array,P->name)==0){ P1=P; break;}
P = P->next; }
while(P1){
*P1=*(P1->next);
P2=P1;
P1 = P1->next;
}
delete P2;}
//删除
void del(stu* H,char array[])
{
stu *P,*P1,*P2;
P = H;
while(P)
{ if(strcmp(array,P->name)==0){ P1=P; break;}
P = P->next; }
while(P1){
*P1=*(P1->next);
P2=P1;
P1 = P1->next;
}
delete P2;}
作者: m1043 发布时间: 2011-12-04
C/C++ code
你这种方法是覆盖式删除,也就是找到当前节点后,将后一项复制到前一项,然后删除当前节点下一个,这样做效率高,但是当你找到的是末尾点即最后一个节点时,还是得把链表遍历一遍至末尾,再删除为节点,然后更新尾节点并赋值为NULL。另外,你的这个stu是一个类或结构体,如果里面只有一个name成员这样没错,如果里面还有别的成员,那就不行了。你通过覆盖式删除东东就得不到你想要的结果。
void del(stu* H,char array[]) { stu *P,*P1,*P2; P = H; while(P1) { if(strcmp(array,P->name)==0) { P1=P; break; } P = P->next; } if(P1) { *P1=*(P1->next); P2=P1->next; P1 = P2->next; delete P2; } }
你这种方法是覆盖式删除,也就是找到当前节点后,将后一项复制到前一项,然后删除当前节点下一个,这样做效率高,但是当你找到的是末尾点即最后一个节点时,还是得把链表遍历一遍至末尾,再删除为节点,然后更新尾节点并赋值为NULL。另外,你的这个stu是一个类或结构体,如果里面只有一个name成员这样没错,如果里面还有别的成员,那就不行了。你通过覆盖式删除东东就得不到你想要的结果。
作者: wumuzi520 发布时间: 2011-12-04
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28