删除单向链表中的最小值结点

image

/******************************************************
 *
 *  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);
}
posted @ 2024-04-22 21:36  Dazz_24  阅读(32)  评论(0)    收藏  举报