
/******************************************************
*
* name : DelTargetNode
* function : 删除单链表L(有头结点)中的一个最小值结点
* argument
* @L :链表头结点的地址
*
* retval : None
* author : Dazz
* date : 2024/4/22
* note : None
*
* *******************************************************/
void DelMinNode(LinkList_t *L)
{
// 错误处理
if (NULL == L)
{
printf("请输入有效地址\n");
return;
}
LinkList_t *min_prev; //记录最小值结点的直接前驱地址
LinkList_t *min = L->next; //记录最小值结点的地址
LinkList_t *phead = L->next; //记录当前结点的地址
LinkList *phead_prev = L; //记录当前结点的直接前驱地址
// 遍历链表,找到最小值结点
while (phead->next)
{
if (min->data > phead->next->data)
{
min = phead->next;
min_prev = phead;
}
//如果发现当前结点数据域不大于当前结点的直接后继,则向后遍历
phead_prev = phead;
phead = phead->next;
}
//删除当前的最小值结点,前提是让最小值结点的直接前驱指向最小值结点的直接后继
min_prev->next = min->next;
// 删除待删结点
min->next = NULL;
free(min);
}