已知两个单链表pa 和pb各自有序,把它们合并成一个链表依然有序
LinkList * MergedSortList(LinkList *pa,LinkList *pb){
assert(pa->next!=NULL&&pb->next!=NULL);
LinkList *merge=pa; //作为返回值
LinkList *temp=pa;//由于返回的链表首地址必须是链表头,因此用一个temp来完成合并过程
pa=pa->next;
pb=pb->next;
while(pa&&pb){
if(pa->data<=pb->data){
temp->next=pa; //把当前节点赋给合并后的链表
pa=pa->next;//移动pa指针
temp=temp->next;//移动合并链表指针
temp->next=NULL;
}else{
temp->next=pb; //把当前节点赋给合并后的链表
pb=pb->next;//移动pb指针
temp=temp->next;//移动合并链表指针
temp->next=NULL;
}
}
if(pa!=NULL) temp->next=pa;
if(pb!=NULL) temp->next=pb;
return merge;
}
已知两个单链表pa、pb元素各自有序,求它们的交集,并且存于pa中
LinkList *MergeUnion(LinkList *pa,LinkList *pb){
assert(pa->next!=NULL&&pb->next!=NULL);
LinkList *head=pa;
pa=pa->next;
pb=pb->next;
LinkList *temp=head;
while(pa&&pb){
if(pa->data==pb->data){
temp->next=pa;
temp=temp->next;
pa=pa->next;
LinkList *u=pb;
pb=pb->next;
free(u);
}else if(pa->data<pb->data){
LinkList *u=pa;
pa=pa->next;
free(u);
}else{
LinkList *u=pb;
pb=pb->next;
free(u);
}
}
while(pa!=NULL){
LinkList *u=pa;
pa=pa->next;
free(u);
}
while(pb!=NULL){
LinkList *u=pb;
pb=pb->next;
free(u);
}
return head;
}