已知递增有序的单链表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;
}
展开
 我来答
新新5F602
2012-07-21 · TA获得超过255个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:209万
展开全部
当集合A={1, 1, 2, 3, 5} B={1, 3, 5}时,A的第一个1可以被删除、如果加上你那银改乎句话的话,第二个1不能被删锋悉除了,这就歼渗是原因所在。
追问
题目已知的是递增有序的单链表A,B,如果A={1, 1, 2, 3, 5}这样也叫做递增吗?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式