已知递增有序的单链表A,B,(A,B中的元素个数分别为m,n,且A,B中都带有头结点),分别存储了一个集合
已知递增有序的单链表A,B,(A,B中的元素个数分别为m,n,且A,B中都带有头结点),分别存储了一个集合,请设计算法,以求出两个集合A和B的差集A-B,将差集保存在单链...
已知递增有序的单链表A,B,(A,B中的元素个数分别为m,n,且A,B中都带有头结点),分别存储了一个集合,请设计算法,以求出两个集合A和B的差集A-B,将差集保存在单链表A中,并保持元素的递增有序性。
以下是课本答案给出的算法,我已经上机调试,是正确的,但是我觉得有一个地方有点问题,现在我贴出课本答案给出的代码:
LNode *deleteL(LNode *&A,LNode *B)
{
LNode *p=A->next,*q=B->next;
LNode *pre=A;
LNode *r;
while(p!=NULL&&q!=NULL)
{
if(p->data<q->data)
{
pre=p;
p=p->next;
}
else if(p->data>q->data)
{
q=q->next;
}
else
{
pre->next=p->next;
r=p;
p=p->next;//我的问题在这里!我觉得这句话后边应该加上一句q=q->next,更好,因
free(r);//为既然p->data=q->data; 执行p->next->data肯定是大于q->data的, 如 //果不加q=q->next,那p->next->data还要再和q->data比较一次,这不是多
//余吗?
}
}
return A;
} 展开
以下是课本答案给出的算法,我已经上机调试,是正确的,但是我觉得有一个地方有点问题,现在我贴出课本答案给出的代码:
LNode *deleteL(LNode *&A,LNode *B)
{
LNode *p=A->next,*q=B->next;
LNode *pre=A;
LNode *r;
while(p!=NULL&&q!=NULL)
{
if(p->data<q->data)
{
pre=p;
p=p->next;
}
else if(p->data>q->data)
{
q=q->next;
}
else
{
pre->next=p->next;
r=p;
p=p->next;//我的问题在这里!我觉得这句话后边应该加上一句q=q->next,更好,因
free(r);//为既然p->data=q->data; 执行p->next->data肯定是大于q->data的, 如 //果不加q=q->next,那p->next->data还要再和q->data比较一次,这不是多
//余吗?
}
}
return A;
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询