链式线性单链表——删除节点最大元素
删除节点中元素最大的节点
void delmaxnode(LinkList *&L)
{
LinkList*p=L->next, *pre = L,*maxp=p,*maxpre = pre;
while(p!=NULL)
{
if(maxp->data<p->data)
{
maxp = p;
maxpre = pre;
}
pre = p;
p=p->next;
}
maxpre->next=maxp->next;
free(maxpre);
}
该过程总共运用到了四个指针,为防止删除之后仍然保留链表的连续,其中*pre *p一组相伴指针(我觉得比较形象,一起跟着移动)负责向前查找数值,并且跟*maxpre与*maxp这一组相伴指针进行数值对比,具体是*p->data与*maxp->data进行比较,之后如果maxprex<p,则将maxpre移动到p当下的位置,p则继续往下找,不断对比,直至表尾,最后释放maxp空间。
图示: