我写的一个删除链表结点的函数,求帮忙看下是否正确
[code=C/C++][struct thing *del2(struct thing *head)
{
struct thing *p3,*p4;
p3=head;
p4=head;
while(p3!=NULL)
{
if((strcmp(delname,p3->nam))==0)
{
if(p3==head)
{
head=p3->next;
p4=head;
}
else
p4->next=p3->next;
p3=p3->next;
}
else
{
p4=p3;
p3=p3->next;
}
}
return(head);
}/code]
上面是我个人写的一个删除链表结点的函数,delname是全局变量,大家就帮我看下有没有漏了其它情况就行了,我自己改了很多次,每次都有问题,要不是当要删除的链表结点在第一个时出问题,就是无法删除相同的结点,这个是我改了多次后的代码,但是我不敢保证它是真的包括了所有情况,所以来问一下大家。。。。
[解决办法]
http://topic.csdn.net/u/20111226/22/640e5f4f-648d-4600-bd5c-f8f964168542.html
struct thing *del2(struct thing *head){ struct thing *p3,*p4; p3=head; p4=head; while(p3!=NULL) { if((strcmp(delname,p3->name))==0) { if(p3==head) { head=p3->next; p4=head; } else p4->next=p3->next; p3=p3->next; } else { p4=p3; p3=p3->next; } } return(head);}
[解决办法]
一共就三种状况:
空表:这个可以被while(p3!=NULL)解决
头节点匹配:这个有if(p3==head)处理
其它节点匹配:这个有else p4->next=p3->next;处理