考研数据结构(每日一题)
题目:设有一个带头节点的循环单链表,其结点值均为正整数。设计一个算法,反复找出单链表中结点值最小的结点并输出,然后将该结点从中删除,直到单链表为空为止,再删除表头结点。
算法思想:
反复找到当前的最小值结点,并删除,直到链表为空,释放头结点L。
完整代码:
typedef struct LNode{
int data;
struct LNode *next;
}
void Delete_min(LinkList &L){
LNode *pre = L;
LNode *p = pre -> next; //指向头结点的下一个结点
LNode *minp = p;
LNode *minpre = pre; //初始化前驱
while (p != L)
{
if (p -> data < minp -> data)
{
minp = p;
minpre = pre; //找
}else
{
pre = p;
p = p -> next;
}
printf("%d",minp -> data);
minpre -> next = minp -> next;
free(minp);
}
}