码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-02 00:12:12      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:ret   破坏   表的基本操作   tail   def   输出   eof   lin   交集   

#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;
}

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

标签:ret   破坏   表的基本操作   tail   def   输出   eof   lin   交集   

原文地址:https://www.cnblogs.com/jiafeng1996/p/11286101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!