单链表类型定义如下:
typedef struct node
{int data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
请编写一个函数,删除非空的带头结点单链表L中的最小值。函数的原型如下:
void f34(LinkList L);
例如,对于如下的链表L:
【正确答案】:参考程序如下:
void f34(LinkList L) //删除单链表中的最小值
{
LinkList minp,p;
int mind; //保存当前最小值
if(L-> next==NULL)return; //若为空表则返回
mind=L-> next-> data;
p=minp=L; //指向最小值的前一个结点
while(p-> next!=NULL)
{if(p-> next-> next!=NULL&&p-> next-> next-> data<mind)
{mind=p-> next-> next-> data;
minp=p-> next;
}
p-p-> next;
}
if(minp!=NULL)
{p=minp-> next;
minp-> next=minp-> next-> next;
free(p);
}
return;
}
