链表的基本操作 三(增序链表的合并,无序链表的交集)

#include<stdio.h>
#include<malloc.h>


typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
LinkNode *create_LNode(LinkNode *L){//创建链表,不带特殊头结点
LinkNode *newp,*tail;
int a;
L=NULL;//创建一个不带头结点的链表
printf("请输入节点:\n");
scanf("%d",&a);
while(a!=-1){
newp=(LinkNode*)malloc(sizeof(LinkNode));
newp->next=NULL;
newp->data=a;
if(L==NULL){
L=tail=newp;
}
else{
tail->next=newp;tail=newp;
}
scanf("%d",&a);
}
return L;
}


LinkNode *LinkNode_Merge(LinkNode *La,LinkNode *Lb){//增序链表的合并,破坏La,Lb,组合Lc
LinkNode *Lc,*pa,*pb,*tail;
pa=La->next;
pb=Lb->next;
free(Lb);
//Lc=tail=(LinkNode *)malloc(sizeof(LinkNode));
Lc=tail=La;
while(pa!=NULL&&pb!=NULL){
if(pb->data<=pa->data){
tail->next=pb;
tail=pb;
pb=pb->next;
}
else{
tail->next=pa;
tail=pa;
pa=pa->next;
}
}
if(pa!=NULL){
tail->next=pa;
}
else{
tail->next=pb;
}
return Lc;

}


LinkNode *LinkNode_Intersection(LinkNode *La,LinkNode *Lb){//无序链表LA交Lb
LinkNode *Lc,*tail,*pa,*pb,*newp;
Lc=NULL;//创建无头结点的Lc
for(pa=La;pa;pa=pa->next){
for(pb=Lb;pb;pb=pb->next){
if(pb->data==pa->data){
newp=(LinkNode *)malloc(sizeof(LinkNode));
newp->data=pa->data;
newp->next=NULL;
if(Lc==NULL){
Lc=newp;
tail=newp;
}
else{
tail->next=newp;
tail=newp;
}
break;
}
}
}
return Lc;
}


void print(LinkNode *L){//输出函数
LinkNode *p;
for(p=L;p;p=p->next){
printf("%d ",p->data);
}
printf("\n");
}
int main(){
LinkNode *La,*Lb,*Lc;
La=create_LNode(La);
print(La);
Lb=create_LNode(Lb);
print(Lb);

//Lc=LinkNode_Merge(La,Lb);//增序链表的合并
Lc=LinkNode_Intersection(La,Lb);//无序链表的交集
print(Lc);


return 0;
}

转载于:https://www.cnblogs.com/jiafeng1996/p/11286101.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值