14

填空题 14 /47

已知集合A和B的元素分别用不含头结点的单链表存储,函数difference( )用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。

链表结点的结构类型定义如下:
struct node  
{  
int elem;  
node* next;  
};  
 
void difference(node** LA , node* LB)  
{  
node *pa , *pb , *pre , *q;  
pre = NULL;  
1//1   
while(pa)  {  
pb = LB;  
   while2                 //2   
   pb = pb->next;  
   if3                   //3   
   {  
    if(!pre)  
        *LA = 4     ;     //4   
     else  
           5 = pa->next;     //5
     q = pa;  
     pa = pa->next;  
     free(q);  
   }  
    else  {  
           6 ;             //6   
           pa = pa->next;  
    }  
}  
}  

参考答案

代码中的指针pa用于指向集合A的元素;pb指向集合B的元素;临时指针q指向需要被删除的元素;pre用于实现删除时结点的链接,与pa保持所指结点的前后继关系。