自己写的链表小程序,请大神帮忙看看

以下是一段链表程序,链表创建和输出函数都没有问题,但是这个函数执行时好像陷入了死循环,我找不到问题在哪里,大神们帮忙看下,多谢了

void deletelink(int min,int max,linknode *phead)//给出增序链表头指针,删除大于 min 小于max的链表
{
linknode *pa,*pb,*pc,*pnow=phead;
while(pnow->next!=NULL&&pnow->next->data<=min)
{
pnow=pnow->next;
}//链表有头结点,假设链表有9元素,头结点值为0;0-1-2-3-4-5-6-7-8-9,头结点不包括在内,min=2,max=5。先让pnow循环 至 2处
pa=pnow;//pa=2
pnow=pnow->next;
pb=pnow; //pb=pnow=3
if(pnow!=NULL)//若pnow不空
{
while(pnow!=NULL&&pnow->data {
pnow=pnow->next;
}//让pnow循环至 5 处
pa->next=pnow;//2 指向 5
while(pb!=pnow)//删除 3开始 一直到5之前的节点
{
pc=pb;
pb=pb->next;
free(pc);
}
}
}

13个回答

倒数第三句程序应该是 deletelink(2,5,phead);

目测第一个循环出来时。pa指向的值为3

zhuaaaaaazhu
zhuaaaaaazhu 不会呀 是从0开始的
接近 3 年之前 回复

第二个循环条件 改为 while(pnow!=NULL&&pnow->data < max)

zhuaaaaaazhu
zhuaaaaaazhu 额我是这样写的 复制粘贴的时候没注意没有出来
接近 3 年之前 回复

我再发一遍程序。。。
void deletelink(int min,int max,linknode *phead)//给出增序链表头指针,删除大于 min 小于max的链表
{
linknode *pa,*pb,*pc,*pnow=phead;
while(pnow->next!=NULL&&pnow->next->data<=min)
{
pnow=pnow->next;
}//链表有头结点,假设链表有9元素,头结点值为0;0-1-2-3-4-5-6-7-8-9,头结点不包括在内,min=2,max=5。先让pnow循环 至 2处
pa=pnow;//pa=2
pnow=pnow->next;
pb=pnow; //pb=pnow=3
if(pnow!=NULL)//若pnow不空
{
while(pnow!=NULL&&pnow->data {
pnow=pnow->next;
}//让pnow循环至 5 处
pa->next=pnow;//2 指向 5
while(pb!=pnow)//删除 3开始 一直到5之前的节点
{
pc=pb;
pb=pb->next;
free(pc);
}
}
}

zhuaaaaaazhu
zhuaaaaaazhu 奇怪 粘贴就不见了
接近 3 年之前 回复

程序在这里图片说明

你是只用你给的例子测试的,还是用了其他的测试用例?

如果 head 的数据 大于 min ,那程序是不对的。

zhuaaaaaazhu
zhuaaaaaazhu 我自己的例子,用的是递增的链表测得,结果好像陷入死循环了,执行EXE时一直在刷屏输出
接近 3 年之前 回复

函数的鲁棒性不是很好,最好返回结点删除后的链表头指针。

先确定边界值的前一个元素。 pa是imin的前一个元素,pb是max的前一个元素。

void deletelink(int min, int max, linknode *phead)//给出增序链表头指针,删除大于 min 小于max的链表
{
linknode *pa, *pb, *pc, *pnow = phead;
while (pnow->next != NULL&&pnow->next->data <= min)
{
pnow = pnow->next;
}//链表有头结点,假设链表有9元素,头结点值为0;0-1-2-3-4-5-6-7-8-9,头结点不包括在内,min=2,max=5。先让pnow循环 至 2处
pa = pnow;//pa为2

while (pnow->next != NULL&&pnow->next->data < max){
    pnow = pnow->next;
}//让pnow循环至 4 处
pb = pnow;

pnow = pa;
pa->next = pb->next;
while (pb->next != pnow)//删除 3开始 一直到5之前的节点
{
    pc = pnow;
    pnow = pnow->next;
    free(pc);
}

}

zhuaaaaaazhu
zhuaaaaaazhu 还是死循环
接近 3 年之前 回复

能把你的测试程序复制粘贴一下吗?

上一楼的大哥图片说明

共13条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问