步骤:
1.遍历链表,当num不等于节点值且next不为空时为p1/p2指针赋值
2.判断p1值是否为num,是则分类分析,否则num不在链表里
3.p1是头节点,删除时把head指向头节点的下一个节点,同时free p1
4.p1是中间节点,删除p2->next=p1->next, free p1
代码:
node* del(node *head,int num){
//删除值为num的节点
node *p1,*p2;
p1=head;
while(num!=p1->data&& p1->next!=NULL ){//得到num所在指针p1及其前面的p2
p2=p1;
p1=p1->next;
}
//num在单链表里
if(num==p1->data){
//p1为头节点
if(p1==head){
head=p1->next;
free(p1);
}
else{
p2->next=p1->next;
free(p1);
}
}
else { //没找到num
printf("nonum");
}
return head;
}