实现求两个集合的并集的运算 A=A∪B

题目:已知递增有序的两个单链表 A,B 分别存储了一个集合。设计算法实现求两个集合的并集的运算 A=A∪B。

提示:由于单链表有序递增,所以集合的合并是A并B保存到A中,如果出现相同结点,只保留一个,所以要在这两个链表中遍历。又因为链表是递增的,所以先判断小的结点留下来A,如果相等就保留A中的,删除B中的,如果A大于B,则B中的工作指针向下移。

LinkList Union(LinkList ha, LinkList hb){
    pa=ha->next;
    pb=hb->next;
    pc=ha; // pc为结果链表当前结点的前驱指针
    while(pa&&pb) // 表示pa和pb同时都有结点就进入while循环
        if(pa->data < pb->data){ // 先找小的
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }else 
            if(pa->data > pb->data){
                pc->next=pb;
                pc=pb;
                pb=pb->next;
            }
            else { // 处理pa->data=pb->data.
                pe->next=pa;
                pc=pa;
                pa=pa->next;
                u=pb;
                pb=pb->next;
                free(u);
            }
        if(pa) pc->next=pa;
        else pc->next=pb;
        free (hb); // 释放hb头结点
        return(ha);
}

你可能感兴趣的:(数据结构,链表,数据结构)