删除完一个节点时,不停止,继续往后搜索后面链表中是否仍有包含该数据的节点,即继续往后删除。
就这样,用一个while语句循环删除,指针指向NULL时结束。
示例函数:
(程序没进行编译,可能有很多问题。放在这里只是希望能启发一下楼主)
struct str
{ int data;
struct str *next;
}*head;
…………
…………
int del(int x)
{ struct str *p,*p1,*p2;
int error=0;
/*error为函数的返回值,函数返回0代表删除失败*/
if(head==NULL)
{ printf("链表为空\n");
return error;
}
p1->next=head;
p=head;
while(p!=NULL) /*只有检查完所有节点时才结束,而不是删除完一个就立即返回*/
if(p->data==x)
{ p2=p;p1->next=(p=(p->next));
if(p2==head) head=head->next;
/*如果要删除的是头节点,则将head后移,防止head指向空,使得无法再对链表做其他操作*/
free(p2);
error=1;
}
else { p=p->next;p1=p1->next; }
if(!error) printf("数据不存在\n");
return error;
}