前提: 必须找到删除节点的上一个节点。
原理: 先 找到要删除的节点的地址。 然后 利用要删除节点的地址 再次进入循环查找 找到要删除节点的上一个地址。
代码:
void delect_list_mid(BK* p,int num){
BK* h; //存入上一个节点的地址
h=p; //h 存的表头的数据
//遍历链表找到要删除的节点
while(p->next!=NULL){
if(p->num==2){ //为什么丢失两个等于号
break;
}
p=p->next;
}
//遍历链表找到要删除的节点的上一个节点
while(h->next!=NULL){
if(h->next==p){ //灵魂所在
break;
}
h=h->next;
}
printf("旧的h:%d\n",h);
printf("新的p:%d\n",p);
//给旧的指针的地址域赋NULL;
h->next=p->next;
free(p);
}