/******************************************************
*
* name : DelTargetNode
* function : 删除单链表L(有头结点)中的一个最小值结点
* argument
* @L :链表头结点的地址
*
* retval : None
* author : Dazz
* date : 2024/4/22
* note : None
*
* *******************************************************/
void DelMinNode(LinkList_t *L)
{
// 错误处理
if (NULL == head)
{
printf("请输入有效地址\n");
return;
}
// Min记录链表中的最小值结点的值
int Min = L->next;
// 备份链表的头结点地址
LinkList_t *temp = L;
// 记录最小值结点为第几个结点
int num = 1;
// 计数器,记录当前为第几个结点
int count = 1;
// 遍历链表,找到最小值结点
while (temp->next)
{
temp = temp->next;
count++;
if (temp->next < Min)
{
Min = temp->next;
num = count;
}
}
// 再次对头结点做备份
LinkList_t *temp1 = head;
// 对头结点的直接后继做备份
LinkList_t *temp2 = head->next;
// 遍历链表,找到待删除结点和待删除结点的直接前驱
for (int i = num; i > 1; i--)
{
temp1 = temp1->next;
temp2 = temp2->next;
}
// 将待删结点的直接前驱的指针域指向待删除结点的直接后继
temp1->next = temp2->next;
// 将待删结点的指针域指向NULL
temp2->next = NULL;
// 删除待删结点
free(temp2);
temp2 = NULL;
}
标签:结点,删除,temp,next,链表,temp2,最小值
From: https://www.cnblogs.com/Dazz24/p/18151609