12

问题

        设有两个从小到大排序的带头结点的有序链表。试编写求这两个链表交运算的算法(),要求结果链表仍是从小到大排序,但无重复元素。

分析

        11题的思路稍微改一下,将l1链表置空,当l1和l2对应结点相等时,再判断一下是不是和新l1的尾结点相等,不相等时插入。

代码

void intersection(LinkList &l1, LinkList &l2) {
    LNode *p = l1 -> next, *q = l2 -> next, *r;
    l1 -> next = NULL;
    r = l1;
    while(p && q) {
        if(p -> data == q -> data) {///值相等,插入到l1中,尾插法
            if(r == l1) {///r = l1  第一个结点插入,不需要判断是否和尾结点元素相等
                LNode *p1 = p -> next;
                p -> next = NULL;
                r -> next = p;
                r = p;
                p = p1;
            } else {
                if(p -> data != r -> data) {///不是第一个结点,且和尾结点元素值不相等,插入
                    LNode *p1 = p -> next;
                    p -> next = NULL;
                    r -> next = p;
                    r = p;
                    p = p1;
                }else {
                    p = p -> next;
                    q = q -> next;
                }

            }
        }else if(p -> data < q -> data) {///移动p
            p = p -> next;
        }else if(p -> data > q -> data){///移动q
            q = q -> next;
        }
    }
}

源代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值