struct student //结构变量student的定义
{
long num; //变量内的元素
float score;
struct student *next;
};
int n;
struct student *del(struct student *head, long num)//定义结构体变量指针del
{
struct student *p1, *p2; //定义两个结构体变量的指针p1、p2;定义结构变量里面的变量
if (head == NULL) //首先判断链表头是否为空,即整个链表是否为空表
{ //若是空表,则输出空
printf("\nlist null!\n");
return head;
}
p1 = head; //将链表头地址赋给p1
while (num != p1->num&&p1->next != NULL) //当要删除的num不等于p1所指向的num且满足p1的下一个结点不为空
{
p2 = p1; p1 = p1->next; //则将p1赋给p2,再将p1指向下一个节点;重复进行,直到找到要找到的num,此时p1指向的num就是所要找的num
}
if (num == p1->num) { //除非链表中不存在要寻找的num,否则这个条件是一定成立的,
if(p1==head){ //如果要删除的是第1个节点
head = p1->next; //则让head指向p1的下一个节点,也就是第二个节点
}
else {
p2->next = p1->next; //如果要删除的不是第一个节点,则让p2的next指向p1(要删除的结点)的下一个结点,此时则跳过了这个num,即达到删除的效果
}
printf("delete:%d\n", num);
n = n - 1;
}
else {
printf("%ldnot found!\n", num);
return head;
}
}