Loading

链表的操作例题

链表的删除操作

题目:设计一个算法删除单链表L(有头结点)中的一个最小值结点。

/*******************************************
 * name     : DelNode
 * function :删除单链表L中的一个最小值结点
 * argument : @L:单链表L的地址
 * retval   : None
 * date     :2024/04/22
 * note     :Note
********************************************/
void DelNode(*L)
{
    // 链表为空无法删除最小值结点
    if (L->next == NULL) {
        printf("Cannot delete min value node from single-node list.\n");
        return;
    }
    LinkList *inc = L->next;        //递增结点(初值是首结点的地址)
    LinkList *minNode = inc;        //最小值结点的地址
    LinkList *minNode_front = NULL; //最小值结点的前一个地址
    while(inc->next){
        if(minNode->data > inc->next->data){
            minNode_front = inc;
            minNode = inc->next;
        }
        inc = inc->next;
    }
    //如果最小值结点就是首结点
    if(L->next == minNode){
        L->next = minNode->next;
        //删除最小结点
        minNode->next = NULL;
        free(minNode);
    	return;
    }
    //删除最小结点
    minNode_front->next = minNode->next;
    minNode->next = NULL;
    //释放空间
    free(minNode);
    return;
}

posted @ 2024-04-22 21:27  子非予  阅读(26)  评论(0)    收藏  举报