12

    xiaoxiao2023-03-24  4

    问题

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

    分析

            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
    转载请注明原文地址: https://ju.6miu.com/read-1201405.html
    最新回复(0)