- 试编写带头节点的单链表L删除一个最小值节点的高效算法(假设最小值点是唯一的)
分析:一般对于链表的插入或者删除一般分为两个步骤:查找和删除(插入)
那么首先来复习一下如何遍历单链表
if(p->next!=NULL)
p=p->next;
删除一个结点(假设p->next=q)
p->next=q->next;
free(q)
在p结点后插入一个结点s,
s->next=p->next;
p->next=s;
了解这些分析这道题
算法思想:设置一个指针p遍历线性表,pre为p的前驱,minp标记单链表元素最小值,mpre为minp的前驱。如果p->data<minp->data,将pre和p分别赋值给mpre、 minp,遍历结束把minp指针所指结点删除即可
void Delt_min(LinkList &L){
LNode *pre=L,*p=L->next;
LNode *minp=p,*mpre=pre;
if(p->data<minp->data)
{
minp=p;
mpre=pre;
}
else
{
pre=p;
p=p->nex;
}
mpre->next=minp->next;
free(minp);
}