结构推理 已知两个单链表A与B分别表示两个集合,其元素类型为int且递增排列,其头结点指针分别为a,b。编写一个函数求出A和B的交集C,要求C同样以元素值递增的单链表形式存储。
【正确答案】(1)数据结构
   采用单链表的定义。
   (2)思路
   依次比较即可。但要注意,当两个链表有公共元素后,下次查找时要从公共元素之后开始。
   (3)算法
   PNode and(PNode a,PNode b){
       PNode cur_a,cur_b,cur_c,c;
       c=createNullList();
       if(c==NULL)
           return NULL;
       cur_a=a->link;
       cur_b=b->link;
       cur_c=c;
       while(cur_a!=NULL&&cur_b!=NULL){
           if(cur_a->info<cur_b->info)
             cur_a=cur_a->link;
           else if(cur_a->info>cur_b->info)
             cur_b=cur_b->link;
           else{
             cur_c->link=(PNode)malloc(sizeof(struct Node));
             if(cur_c->link==NULL)
             {
               freelist(c);
               return NULL;
             }
             cur_c=cur_c->link;
             cur_c->info=cur_a->info;
             cur_a=cur_a->link;
             cur_b=cur_b->link;
           }
       }
       cur-c->link=NULL;
       return c;
   }
   (4)代价分析
   最坏时间代价为O(n+m)。其中,n和m分别是集合A和B中元素的个数。
【答案解析】