这是删除指针中最大值的函数.逻辑错误,elemsn * delmaxval(elemsn *h){elemsn *pm,*qm,*p,*q;\x05pm=p=h;\x05while(p)\x05{\x05\x05q=p;\x05\x05p=p->next;\x05\x05if(pm->datadata)\x05\x05{\x05\x05 pm=p;\x05\x05 qm=q;\x05\x05}\x05}\x05if(pm==h)

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 01:17:49
这是删除指针中最大值的函数.逻辑错误,elemsn * delmaxval(elemsn *h){elemsn *pm,*qm,*p,*q;\x05pm=p=h;\x05while(p)\x05{\x05\x05q=p;\x05\x05p=p->next;\x05\x05if(pm->datadata)\x05\x05{\x05\x05 pm=p;\x05\x05 qm=q;\x05\x05}\x05}\x05if(pm==h)

这是删除指针中最大值的函数.逻辑错误,elemsn * delmaxval(elemsn *h){elemsn *pm,*qm,*p,*q;\x05pm=p=h;\x05while(p)\x05{\x05\x05q=p;\x05\x05p=p->next;\x05\x05if(pm->datadata)\x05\x05{\x05\x05 pm=p;\x05\x05 qm=q;\x05\x05}\x05}\x05if(pm==h)
这是删除指针中最大值的函数.逻辑错误,
elemsn * delmaxval(elemsn *h)
{
elemsn *pm,*qm,*p,*q;
\x05pm=p=h;
\x05while(p)
\x05{
\x05\x05q=p;
\x05\x05p=p->next;
\x05\x05if(pm->datadata)
\x05\x05{
\x05\x05 pm=p;
\x05\x05 qm=q;
\x05\x05}
\x05}
\x05if(pm==h)
\x05{
\x05\x05h=h->next;
\x05\x05free(pm);
\x05}
\x05else
\x05{
\x05\x05qm->next=pm->next;
\x05\x05free(pm);
\x05\x05
\x05}
\x05return h;
}

这是删除指针中最大值的函数.逻辑错误,elemsn * delmaxval(elemsn *h){elemsn *pm,*qm,*p,*q;\x05pm=p=h;\x05while(p)\x05{\x05\x05q=p;\x05\x05p=p->next;\x05\x05if(pm->datadata)\x05\x05{\x05\x05 pm=p;\x05\x05 qm=q;\x05\x05}\x05}\x05if(pm==h)
循环控制条件只能保证指针【p】非空,但在循环体中,你用到了指针【p→next】,并未加检查就引用了它的数据域【p→next→data】.当【p→next】为空时——链表总是有限的,所以这件事肯定会发生——就出错了.
对于长度为【n】的链表,只需进行【n-1】次比较,所以也只需循环【n-1】次.所以,控制循环次数的应该是【p→next】,而不是【p】.