单链表归并
题目一
已知两个链表A和B分别表示两个集合,元素递增排序。编制函数,求A和B的交集,并存放于A链表中
思想
归并实现,设置两个工作指针分别对应两个链表,分别遍历两个链表,当元素相同时才保留且保留一个,其他结点释放。当一个链表遍历完成后,释放另外一个链表。
代码段
void intercectLNode(LNode *&A,LNode *&B)
{
LNode *PA,*PB,*P;
PA=A->next;
PB=B->next;
A->next=NULL;
p=A;
while(PA!=NULL && PB!=NULL)
{
if(PA->data>PB->data)
PB=PB->next;
else if(PA->data<PB->data)
PA=PA->next;
else{
p->next=PA;
p=p->next;
PA=PA->next;
p->next=NULL;
PB=PB->next;
}
}
}
LinkList Union(LinkList &la,LinkList &lb){
pa=la->next;
pb=lb->next;
pc=la;
while(pa&&pb){
//pa和pb都不为空
if(pa->data==pb->data){
//当pa与pb相等时,并入结果集
pc->next=pa;
pc=pa;
pa=pa->next;
u=pb;
pb=pb-next;
free(u);
}
else if(pa->data<pb->data){
//当pa小于pb时,将pa后移,释放前一个指针
u=pa;
pa=pa->next;
free(u);
}
else{
u=pb;
pb=pb->next;
free(u);
}
}
while(pa){
//当b遍历完成,只剩下a
u=pa;
pa=pa->next;
free(u);
}
while(pb){
u=pb;
pb=pb->next;
free(u);
}
pc->next=NULL;
free(lb);
return la;