数据结构综合应用题⑤
问题:设计一个算法删除单链表L(有头结点)中的一个最小值结点。
思路:用指针p从头至尾扫描链表,pre指向*p结点的前驱,用minp保存值最小的结点指针,minpre指向minp的前驱。一边扫描,一边比较,将最小值结点放到minp中
答案:
void delminnode(LNode *L)
{
LNode *pre=L,*p=pre->next,*minp=p,*minpre=pre;
while(p!=NULL)//查找最小值结点minp以及前驱结点minpre
{
if(p->data<minp->data)
{
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next;//删除*minp结点
free(minp);
}
注:
*pre=p->prior=L(一开始是表头)
*p=L->next=pre->next
*minp=p
*minpre=minp->prior
=p->prior
=pre