2006-c-四
链表的创建、输出等 原文链接
void Delete(LNode *La, LNode *Lb, LNode *Lc) //删除链表A中既存在B又存在C中的元素
{
LNode *pa, *pb, *pc, *q;
pa = La;
pb = Lb->next;
pc = Lc->next;
while (pb && pc) //思路:在链表B和C中查找相同的元素看看此元素是否在A链表中
{
if (pb->data < pc->data)
pb = pb->next;
else if (pc->data < pb->data)
pc = pc->next;
else //找到lb和lc中都出现的结点
{
while (pa->next)
{
if (pa->next->data < pb->data)
pa = pa->next;
else if (pa->next->data > pb->data)
{
//pa = pa->next;//此处注释,原因,添加此句会有漏解情况
pb = pb->next;
pc = pc->next;
break;
}
else //删除la中也包含的该元素
{
q = pa->next;
pa->next = q->next;
free(q);
pa = pa->next;
pb = pb->next;
pc = pc->next;
break;
}
}
}
}
}