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;
                }
            }
        }
    }
}