struct Node*Dell(structNode*pHead,int num){
struct Node* p1;//保存当前节点地址。
struct Node*p2;//p2保存检查过的节点地址
if(pHead==NULL){
printf("是空链表--程序终止\n");
exit(-1);
}
//要删的节点;
p1=pHead;
while(p1->data!=num &&p1->pNext!=NULL) {
p2=p1;
p1=p1->pNext;
}
if(p1->data==num){
//找到了要删除的节点;
if(p1==pHead){//如果要删除的节点是第一个节点
pHead=p1->pNext;//此时头指针指向了第一个节点的后一个节点,也就是第二个节点,这样第一个节点就不在链表中啦
}else{
p2->pNext= p1->pNext; //此句最为重要了--删除以后节点的指向发生了改变2->next=1->next;
//p1->pNext=p2->pNext;这样
}
free(p1);p1=NULL;
printf("删除%d 成功\n",num);
len-=1;
}else{
printf("\n %d 没有找到要删除的数\n",num);
}
return pHead;
}
intmain(intargc,constchar* argv[]) {
structNode*pHead;
pHead=Del(pHead, 12);//删除链表
pRintf(pHead);//打印链表
return0;
}
网友评论