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

Posted jiafeng1996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的基本操作 三(增序链表的合并,无序链表的交集)相关的知识,希望对你有一定的参考价值。

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

以上是关于链表的基本操作 三(增序链表的合并,无序链表的交集)的主要内容,如果未能解决你的问题,请参考以下文章

链表的合并

链表的合并

C语言链表的建立?

《剑指Offer——合并两个排序的链表,两个链表的第一个公共节点》代码

数据结构——链表的基本操作

链表的基本操作