9.已知两个链表A和B分别表示两个集合,其元素递增排列,设计一个算法,求A和B的交集,并存放于A链表中(A中只有A与B相同的部分)
算法思想:设置两个指针依次遍历链表A和B,如果A中数据域元素元素小于B中的数据域元素,则释放A中的结点,指向A链表的指针后移,若B中的元素小则释放B中所指结点,如果A中还有剩余则依次释放A中剩余结点,如果B中还有剩余则依次释放B中剩余结点。else(p->data==q->data)//如果此时比较元素相等。else if(p->datadata)//如果p元素较小。if(q->datadata)
算法思想:设置两个指针依次遍历链表A和B,如果A中数据域元素元素小于B中的数据域元素,则释放A中的结点,指向A链表的指针后移,若B中的元素小则释放B中所指结点,如果A中还有剩余则依次释放A中剩余结点,如果B中还有剩余则依次释放B中剩余结点。
LinkList solA(LinkList &A,LikList &B){
LNode *p=B->next,*q=A->next;//定义两个结点分别指向A链表和B链表
A->next=NULL;//A置空
LNode *r=A,*u;//r指向A
while(q!=NUUL&P!=NUUL){
if(q->data<p->data)//如果q元素比较小
u=q;//指向要删除的结点
q=q->next;//q指针往后移
free(u);//删除结点
else if(p->data<q->data)//如果p元素较小
u=p;//指向要删除结点
p=p->next;//p指针后移
free(u);//删除结点
else(p->data==q->data)//如果此时比较元素相等
p=r->next;//尾插法插入A链表中
r=p;//r指向尾结点
r->next=NUUL;//尾指针置空
}
while(p!=NUUL){//如果B中还有剩余依次删除剩余结点
u=p;
p=p->next;
free(u);
}
while(q!=NUUL){//如果A中有剩余依次删除剩余结点
u=q;
q=q->next;
free(u);
}
free(B);//释放B的头结点
return A;//返回链表A
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)