+ -
当前位置:首页 → 问答吧 → c++删除指针方法,看看哪里不对?

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;}

作者: m1043   发布时间: 2011-12-04

C/C++ code

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

热门下载

更多