问答题 带头结点且头指针为ha和hb的两线性表A和B分别表示两个集合,两表中的元素皆为递增有序。请写一算法求A和B的并集AUB,要求该并集中的元素仍保持递增有序,且要利用A和B的原有结点空间。【北京邮电大学1992年】
【正确答案】正确答案:算法的基本设计思想:将两个链表归并,同时注意如果有元素值相等的元素,则应删掉一个。算法的代码: LinkList Union(LinkList ha,LinkList hb){ //线性表A和B代表两个集合,元素递增有序。ha和hb分别为其链表的头指针 //本算法求A和B的并集Au B,仍用线性表表示,结果链表元素也是递增有序 pa=ha一>next; //设工作指针pa和pb pb=hb一>next; pc=ha; //pc为结果链表当前结点的前驱指针 while(pa&&pb) { if(pa一>datadata) { 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 { pc一>next。pa; Pc=pa, pa=pa一>next; u=pb; pb=pb一>next; free(u); } } if(pa) pc一>next=pa; //若ha表未空,则链入结果表 else pc一>next=pb, //若hb表未空,则链入结果表 free(hb); //释放hb头结点 return ha; }//Union
【答案解析】