这是删除指针中最大值的函数.逻辑错误,
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/19 12:13:11
这是删除指针中最大值的函数.逻辑错误,
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)
\x05{
\x05\x05h=h->next;
\x05\x05free(pm);
\x05}
\x05else
\x05{
\x05\x05qm->next=pm->next;
\x05\x05free(pm);
\x05\x05
\x05}
\x05return h;
}
![这是删除指针中最大值的函数.逻辑错误,](/uploads/image/z/17987079-39-9.jpg?t=%E8%BF%99%E6%98%AF%E5%88%A0%E9%99%A4%E6%8C%87%E9%92%88%E4%B8%AD%E6%9C%80%E5%A4%A7%E5%80%BC%E7%9A%84%E5%87%BD%E6%95%B0.%E9%80%BB%E8%BE%91%E9%94%99%E8%AF%AF%2C)
循环控制条件只能保证指针【p】非空,但在循环体中,你用到了指针【p→next】,并未加检查就引用了它的数据域【p→next→data】.当【p→next】为空时——链表总是有限的,所以这件事肯定会发生——就出错了.
对于长度为【n】的链表,只需进行【n-1】次比较,所以也只需循环【n-1】次.所以,控制循环次数的应该是【p→next】,而不是【p】.
对于长度为【n】的链表,只需进行【n-1】次比较,所以也只需循环【n-1】次.所以,控制循环次数的应该是【p→next】,而不是【p】.