作业帮 > 综合 > 作业

这是删除指针中最大值的函数.逻辑错误,

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/24 08:16:50
这是删除指针中最大值的函数.逻辑错误,
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;
}
循环控制条件只能保证指针【p】非空,但在循环体中,你用到了指针【p→next】,并未加检查就引用了它的数据域【p→next→data】.当【p→next】为空时——链表总是有限的,所以这件事肯定会发生——就出错了.
对于长度为【n】的链表,只需进行【n-1】次比较,所以也只需循环【n-1】次.所以,控制循环次数的应该是【p→next】,而不是【p】.