试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小值结点是唯一的)。
使用四个指针,p,pre,minp,minpre
用p从头至尾扫描单链表,pre指向*p结点的前驱,用minp保存最小结点的指针(初始认为p所指结点值最小),minpre指向*minp结点的前驱,最终p,pre遍历完整个链表,minp,和minpre停留在最小结点处和前面
Linklist del_min(Linklist &L){LNode *pre=L,*p=pre->next;LNode *minpre=pre,*minp=p;while(p!=NULL){if(p->data<minp->data){minp=p;minpre=pre;}pre=p;//没找到的话继续向后扫描p=p->next;}minpre->next=minp->next;free(minp);return L;
}