两个链表求和函数c语言 两个链表的合并算法( 二 )


void unionList(LinkList La, LinkList Lb,LinkList *Lc)
{
//求La,Lb的并集,结果存在Lc
int i;
LinkList a,b,c,newNode,temp;
a = La-next;//指向第一个结点
b = Lb-next;
c = *Lc;
while(a) //先把链表La复制到LC
{
if(!(newNode=(LinkList)malloc(sizeof(LNode)))) exit(EXIT_FAILURE);
newNode-data = https://www.04ip.com/post/a-data;
newNode-next = NULL;
c-next =newNode;
c = newNode;
a = a-next;
}
while(b)//再把链表Lb复制到Lc
{
temp = (*Lc)-next;
while(temp)
{
if(b-data=https://www.04ip.com/post/=temp-data)//查找原链表是否有相同元素
break;
temp = temp-next;
}
if(temp==NULL)
{//temp等于NULL说明没有相同元素,则进行以下操作
if(!(newNode=(LinkList)malloc(sizeof(LNode)))) exit(EXIT_FAILURE);
newNode-data = https://www.04ip.com/post/b-data;
newNode-next = NULL;
c-next =newNode;
c = newNode;
}
b = b-next; //本来上面几句可以做成一个方法,但因为连接第二链表的时候
//b=b-next需要放出来,所以就不做成方法了
}
}
void intersection(LinkList La, LinkList Lb,LinkList *Lc)
{
//求La,Lb的交集,结果存在Lc
LinkList a,b,c,newNode;
a = La-next;//取得第一个结点
c = *Lc;
while(a)
{
b = Lb-next;//取得第一个结点
while(b)
{
if(b-data=https://www.04ip.com/post/=a-data)
{//相等则分配空间,生成新的链表
if(!(newNode=(LinkList)malloc(sizeof(LNode)))) exit(EXIT_FAILURE);
newNode-data = https://www.04ip.com/post/b-data;
newNode-next = NULL;
c-next = newNode;
c = newNode;
break;
}
b = b-next;
}
a = a-next;
}
}
int main(void)
{
LinkList L,L2,L3;
InitList(L);//初始化
InitList(L2);
InitList(L3); //L3用于得到交/并集的结果
CreateList(L,4);//创建链表,含4个元素
CreateList(L2,4);
display(L);//显示链表
display(L2);
printf("\n");
//unionList(L,L2,L3);
intersection(L,L2,L3);
display(L3);
return 0;
}
示例,求交集
请输入元素
1
2
3
4
请输入元素
3
4
5
6
链表:1 2 3 4
链表:3 4 5 6
链表:3 4
请按任意键继续. . .
c语言,如何实现将两个链表相加#includestdlib.h
#includestdio.h
#includemalloc.h
typedef struct datas
{
int num;
struct datas *next;
}DATAS;
DATAS *newData(int len);//创建1条数据链表参数:节点数量返回首节点
DATAS *addData(DATAS *datasHead1,DATAS *datasHead2);//你要的两链表相加 , 结构返回在新的链表中(链表节点数据对应相加,节点数量不一致,按少的算)
int main()
{
//创建3个链表头节点指针
DATAS *datasHead1;DATAS *datasHead2;DATAS *datasHead3;
datasHead1=newData(3);//测试每个链表3个节点数据 , 需要自己加
datasHead2=newData(3);//测试每个链表3个节点数据,需要自己加
datasHead3=addData(datasHead1,datasHead2);//测试每个链表3个节点数据,需要自己加
printf("两链表相加后,新的链表数据为:");
while(datasHead3-next!=NULL)
{
printf("%d ",datasHead3-next-num);
datasHead3=datasHead3-next;
}
return 0;
}
DATAS * newData(int len)//创建1条数据链表参数:节点数量返回首节点
{
int i;
DATAS *datasHead=(DATAS *)malloc(sizeof(DATAS));
DATAS *datasTail=NULL;
datasHead-next=NULL;
printf("输入%d个数 生成链表:",len);
for(i=0;ilen;i++)
{

推荐阅读