单向链表删除操作

操作算法的简单描述:

     这个例子里结构体里有个num成员用来指示节点的编号(这里也用编号来指定要删除的操作),首先用while(num!=p1->num && p1->next!=NULL)来遍历这个链表,在遍历的过程中用p2来指向p1的前一个节点(p2=p1;p1=p1->next;)。假设找到了要删除的节点(是p1),因为p2是p1的前一个节点现在的关系应该是 :p2->next指向p1,p1->next指向p1的下一个。那好办了,p2->next=p1->next,这样就是 p2指向了p1的下一个,p1这个要删除的节点被成功的绕过去了。

 

struct student *del(struct student * head ,long num);以下是其源代码:

struct student *del( struct student *head, long num )

 struct student  *p1, *p2;
    if(head==NULL)
  {
   printf("/nlist null!/n");
   goto end;
  } 
 p1=head;
    while(num!=p1->num && p1->next!=NULL)
    {
  p2=p1; //这里,p2指p1的前一个节点(因为下一句p1指向了下一个节点)
  p1=p1->next;
 }
    if(num==p1->num)
    {
  if(p1==head)
   head=p1->next;
       else
     p2->next=p1->next;
       printf("delete:%ld/n",num);
       n=n-1;
 }
    else printf("%ld not been found!/n",num);
   end:  return(head); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值