能不能有个大佬,帮我分析一下这是怎么实现的?

/删除函数

struct record*delet(struct record *head)

{

 struct record *p1,*p2;

 char number[10];

 printf("\t请输入要删除用户的序号number:");

 scanf("%s",&number);rewind(stdin);

 if(head==NULL)

 {

  printf("\n\t出错了,通讯录无该用户信息记录!!\n");

  return(head);

 }

 p1=head;

 while(strcmp(number,p1->number)!=0&&p1->next!=NULL)

 {

  p2=p1;

  p1=p1->next;

 }

 if(strcmp(number,p1->number)==0)

 {

  if(p1==head)

  {

   head=p1->next;

   printf("\t删除成功,请继续选择功能键!\n\n");

  }

 

  else

  {

   p2=p1->next;

  printf("\t已删除的用户的序号为:%s\n",number);

  printf("\t删除成功,请继续选择功能键!\n\n");

  }

  n=n-1;

 }

 else printf("\t通讯录无该用户的信息记录!\n ");

 return(head);

}

首先输入查询的数,head==NULL时不存在若存在,

 p1指向head;若number和p1->number不同 ,则strcmp返回0,

 p2指向p1; p1指向p1的next;遍历下一个

若number和p1->number相同 ,则strcmp返回0,

情况1 :删除的是头结点  head指向p1->next;完成删除

情况2:删除普通节点: p2指向p1->next;

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m