回 帖 发 新 帖 刷新版面

主题:出问题了,请大家来看看

void merge(Listlink La,Listlink Lb)
{
    Listlink q,p,fp,fq;
    fp = La;
    fq = Lb;
    p = La->next;
    q = Lb->next;
    while(p&&q)
    {
        if(fp->data==p->data)
        {
            fp->next = p->next;
            free(p);
            p = fp->next;
        }
        else if(p->data>q->data)
        {
            fq->next = q->next;
            fp->next = q;
            q->next =p;
            fp = q;
            q = fq->next;
        }
        else if(p->data==q->data)
        {
            p = p->next;
            fp = fp->next;
            fq = q->next;
            free(q);
            q = fq->next;
        }
        else
        {
            p = p->next;
            fp = fp->next;
        }
    }
    while(q)
    {
        if(fq->data==q->data)//这个分支进不去
        {
            fq->next = q->next;
            free(q);
            printf("aaaaaaa\n");
            q = fq->next;
        }
        else
        {
            fq->next = q->next;
            q->next = fp->next;
            fp->next = q;
            fp = fp->next;
            q = fq->next;
        }
    }
}
题目要求是将两个线性表AB合并为一个表A,要求合并后A中不能有相同的元素,但合并前AB中允许有相同元素。

现在的问题是我不知道为什么第二个while中的if的一个分支进不去

回复列表 (共3个回复)

沙发

为什么没人帮忙解决下啊

板凳

试试我这个方法看
PListlink merge(PListlink La,PListlink Lb)
{
    //取小者为表头
    PListlink h, t;
    if (La->data <= Lb->data)
    {
        h = La; t = Lb;
    }
    else
    {
        h = Lb; t = La;
    }
    PListlink p = h;
    PListlink pp = p->next;

    while (p->next)
    {
        //找到比另一个表头元素大的节点
        if (pp->data < t->data)
        {
            p = p->next;
            pp = p->next;
        }
        if (pp->data > t->data)
        {
            p->next = t;
            t = pp;
            pp = p->next;
        }

        //删除重复节点
        while (p->data == pp->data || pp->data == t->data)
        {
            p->next = pp->next;
            delete pp;
            if (p->next == NULL)
            {
                //一个链表消耗完毕,将另一个表接到其尾部返回
                p->next = t;
                return h;
            }
            pp = p->next;
        }
    }
    return h;
}

3 楼

谢谢了,我已经自己解决了

我来回复

您尚未登录,请登录后再回复。点此登录或注册