大家好,又见面了,我是你们的朋友全栈君。

链表的创建查看

删除节点就是将某一节点从链中摘除。

将待删节点与其前一节点解除联系(中间或尾部)或本阶段删除(头节点),并释放相应空间(free)。删除的第一步是找到要删除的节点,同链表查找,如果找不到或链表为空,提示未找到,找到后根据情况删除此节点。删除节点两种情况:第一个节点,后面节点。

步骤:

1、链表为空:不用删除

2、链表不为空:先循环找要删除的节点

1)找到了

1>找到的节点是头节点

被删除节点是第一个节点:只需使head指向第二个节点即可

2>找到的节点是普通节点

被删节点不是第一个节点:使被删节点的前一节点指向被删节点的后一节点即可

2)没找到

结构体节点:

代码语言:javascript代码运行次数:0运行复制typedef struct student {

int num; //学号

int score; //分数

char name[20];

struct student *next;//指针域

}STU;demo:

代码语言:javascript代码运行次数:0运行复制1、

void link_delete_num(STU **p_head,int num)

{

STU * pb,*pf;

pb=*p_head;//让pb指向头节点

if(*p_head == NULL)//链表为空链表

{

printf("链表为空\n");

return ;

}

while(pb->num !=num && pb->next!=NULL)//循环查找要删除的节点

{

pf=pb;

pb=pb->next;

}

if(pb->num == num)//找到了一个节点的num和num相等

{

if(pb == *p_head)//找到的节点是头节点

{

*p_head = pb->next;

}

else//找到的节点是普通节点

{

pf->next = pb->next;

}

free(pb);

}

else//没有找到咱们要删除的节点

{

printf("没有找到您要删除的节点\n");

}

}

2、

void link_delete_name(STU **p_head,char *name)

{

STU * pb,*pf;

pb=*p_head;//让pb指向头节点

if(*p_head == NULL)//链表为空链表

{

printf("链表为空\n");

return ;

}

while(strcmp(pb->name,name)!=0 && pb->next!=NULL)//循环查找要删除的节点

{

pf=pb;

pb=pb->next;

}

if(strcmp(pb->name,name)==0)//找到了一个节点的num和num相等

{

if(pb == *p_head)//找到的节点是头节点

{

*p_head = pb->next;

}

else//找到的节点是普通节点

{

pf->next = pb->next;

}

free(pb);

}

else//没有找到咱们要删除的节点

{

printf("没有找到您要删除的节点\n");

}

}版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。