设有两个线性表A和B皆是单链表存储结构。同一个表中的元素各不相同,且递增有序。写一算法,构成一个新的

设有两个线性表A和B皆是单链表存储结构。同一个表中的元素各不相同,且递增有序。写一算法,构成一个新的线性表C,使C为A和B的差集,且C中元素也递增有序... 设有两个线性表A和B皆是单链表存储结构。同一个表中的元素各不相同,且递增有序。写一算法,构成一个新的线性表C,使C为A和B的差集,且C中元素也递增有序 展开
 我来答
shu2xiao
推荐于2017-12-16 · TA获得超过246个赞
知道小有建树答主
回答量:122
采纳率:100%
帮助的人:79.3万
展开全部

这个问题就是剔除A中的B元素,最朴素的算法就是遍历A,逐个判断是否在B中,算法复杂度为O(n*m),若用二分查找的话,就是O(n*logm),显然效率低下。

考虑到A,B中元素都是有序的,对A中第一个元素,在B中找到第一个不比它小的元素,若两者相等,则该元素剔除,否则加入到c中;对A中下个元素,重复该过程,一直到A或B某一个比较完。算法复杂度为O(n+m)。

struct Node {
    int num;
    struct Node *pNext;
};

typedef struct Node *List;

List chaji( List a, List b)
{
    List c = NULL;
    
    while ( a != NULL && b!= NULL)
    {
        while ( a->num > b->num)
            b = b->pNnext;
        if ( a->num < b->num)
        {
            if (c == NULL) 
                c = malloc(sizeof(struct Node));
            else
            {   
                c->pNext = malloc(sizeof(struct Node));
                c = c->pNext;
            }
            c->num = a->num;
            c->pNext = NULL;
         }
         a = a->pNext;
     }
     
     return c;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式