/*
题目:试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小结点是唯一的)。
出自:王道p38.4
*/
//思路:从头至尾遍历,记录最小值前驱,遍历后删除。
//宏定义
#define ElemType int
//单链表定义
typedef struct LNode{
ElemType val;
struct LNode*next;
}*LinkList,LNode;
[注] 上述宏定义和结构体定义是答题时要写的答案,并不是代码实现时的定义,代码实现稍有不同,感兴趣可去“help.h”中查看。
//实现函数
void WD38_4(LinkList_n L){
if(!L) return;
LNode_n*p=L,*min_pre=L; //使用min_pre记录最小值前驱结点
while(p->next){ //直接检查当前节点下一结点,可避免再记录当前结点的前驱节点
if(p->next->val<min_pre->next->val)min_pre=p;
p=p-&