15

问题

       已知递增有序的单链表A、B分别存储了一个集合,请设计算法以求出两个集合A和B的差集A-B(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。

分析

      初始一个化链表,定义一个常数i初值为0,从A和B的第一个结点开始遍历。A和B结点分别处理大于、小于、等于三种情况即可。

代码

int fun(LinkList A, LinkList B, LinkList &C){
    int i = 0;
    C = (LinkList)malloc(sizeof(LNode));
    LNode *p = A -> next, *q = B -> next, *r = C;
    while(p && q) {
        if(p -> data < q -> data) {
            LNode *temp = (LinkList)malloc(sizeof(LNode));
            temp -> data = p -> data;
            temp -> next = NULL;
            r -> next= temp;
            r = r -> next;
            p = p -> next;
            i++;
        }else if(p -> data == q -> data) {
            p = p -> next;
            q = q -> next;
        }else if(p -> data > q -> data) {
            q = q -> next;
        }
    }
    if(B == NULL) {///B链表结束,A链表剩余的元素即为只在A中出现的元素ikan
        while(p) {
            LNode *temp = (LinkList)malloc(sizeof(LNode));
            temp -> data = p -> data;
            temp -> next = NULL;
            r -> next= temp;
            r = r -> next;
            p = p -> next;
            i++;
        }
    }
    return i;
}

源代码

       http://123.206.59.223:8080/code/code/15.rar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值