操作算法的简单描述:
这个例子里结构体里有个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);
}