问答题 已知两个链表A和B分别表示两个集合,其元素递增排列。编写一函数程序,求A与B的交集,并存放于A链表中。【南京航空航天大学2007年】
【正确答案】正确答案:算法的基本设计思想:对两个链表进行归并,但只有同时出现在两集合中的元素才出现在结果表中。算法的代码: LinkList Union(LinkList la,LinkList ib){ pa=la一>next ; //设工作指针pa和pb pb=ib一>next; pc=la; //结果表中当前合并结点的前驱指针 while(pa&&pb) { if(pa一>data==pb一>data)//交集链入结果表中 { Pc一>next=pa ; Pc=pa; pa=pa一>next; u=pb: pb=pb一>next; free(u); } else if(pa一>datadata) { u=pa, pa=pa一>next; free(u); } else { u=pb; pb=pb一>next; free(u); } } while(pa) { u=pa; pa=pa一>next ; free(u); //释放结点空间 } while(pb) { u=pb; pb=pb一>next ; free(u), //释放结点空间 } pc一>next=NULL; //置链表尾标记 free(ib); //注:本算法中也可对B表不作释放空间的处理 return 1a; }//Union 对两个链表进行归并的题目在各学校历年真题中出现的频率很高,考生应扎实地掌握此类问题。
【答案解析】