链表的删除c语言

2017-11-03  本文已影响0人  macFlyang

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;

}

上一篇 下一篇

猜你喜欢

热点阅读