问答题 试编写在带头结点的单链表中删除一个最小值结点的高效算法:voiddelete(Linklist&L)。【北京理工大学2001年】
【正确答案】正确答案:算法的基本设计思想:首先遍历链表,求得最小值结点及其前驱。遍历结束后再执行删除操作。算法的代码: LinkLiSt Delete(LinkList L){ //L是带头结点的单链表,本算法删除其最小值结点 D:L一>next;lip为工作指针,指向待处理的结点。假定链表非空 pre:L; //pre用来指向最小值结点的前驱 q:p, //q指向最小值结点,初始假定第一元素结点是最小值结点 while(p->next!=NULL) //查找最小值结点 { if(p一>next一>datadata) { Pre=p; q=p一>next; } p=p一>next ; //指针后移 } pre一>next=q一>next; //从链表上删除最小值结点 free(q); //释放最小值结点空间 return L; }//Delete
【答案解析】