1.删除节点
如果链表为空,不需要删除。如果删除的是第一个节点,则需要将保存链表首地址的指针保存第一个节点的下一个节点的地址;如果删除的是中间节点,则找到中间节点的前一个节点,让前一个节点的指针域保存这个节点之后一个节点地址即可。
2.代码实现
//删除节点
void link_delete_num(STU **p_head, int num)
{
STU *pb = NULL;
STU *pf = NULL;
pf = *p_head;
pb = pf;
//链表为空
if (*p_head == NULL)
{
printf("链表为空,没有节点要删除!");
return;
}
//没有找到节点
while (pb->num != num && pb->next == NULL)
{
pf = pb;
pb = pb->next;
}
//找到节点
if (pb->num == num)
{
if (pb == *p_head)
{
//让保存头节点指针保存后一个节点的地址
*p_head = pb->next;
}
else
{
//前一个节点的指针域保存要删除的后一个节点的地址
pf->next = pb->next;
}
//释放空间
free(pb);
pb = NULL;
}
else
{
printf("没有您要删除的学号!\n");
}
}