链表的操作例题
链表的删除操作
题目:设计一个算法删除单链表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;
}

浙公网安备 33010602011771号