C语言创建两条链表并将其内容合并为一条新链表

该链表只能递增输入,不能输入比前一个小的数,并且新生成的第三条链表不能有重复的数据

#include<stdio.h>
#include<stdlib.h>
typedef struct Link
{
	int date;
	struct Link *next;
 } link;

link*Generate()//生成链表并存储数据 
{	
	
 	 link *p=(link*)malloc(sizeof(link));
	 p->next=NULL;	 
	 link *temp=p;	 
	  int *tt,ee;	 
	 tt=&ee;
	 printf("请输入链表元素个数:") ;
	 scanf("%d",&ee);	 
	 int n,m;//
	 for(int i=1;i<=*tt;i++)
	 {
	 	link *a=(link*)malloc(sizeof(link));
	 printf("请输入数据:");
	 	
	 	scanf("%d",&a->date);
	 	m=a->date; 
	 	if(i>=2)
	 	{
	 		while(m<=n)//使其只能递增输入存储数据 
	 		{
	 			printf("请输入比前一个大的数:\n");
	 			scanf("%d",&a->date);
	 			m=a->date;
			 }
		 }
	 	n=a->date;
	 	a->next=NULL;
		temp->next=a;
		temp=temp->next; 	 	
	 }
	 return p;
	 
}

int jishuan(link *k)//统计单条链表元素个数 
{
	link *mm=k->next;
	int qq=0;
	while(mm)
	{
		qq+=1;
		mm=mm->next;
	}
	return (qq);
}

link * Aggregate(link * L1,link * L2)//将两条链表合并为一条新链表 
{
    link * L = (link *)malloc(sizeof(link));
    L->next = NULL;
    link * b = L1->next;
    link * d = L2->next;   
    link * r = L;
    int c=4,i=1;   
    while(c>2)
    {	    	
    	if(i==1)
    	{
    		int cc=0;
    		cc=jishuan( L1);
			for(int a=1;a<=cc;a++)
			{
    			r->next=b;
    			r=b;
    			b=b->next;
			}
			i+=1;
		}
		else
		{ 	
			int gg=0;
			gg=jishuan(L2);
			for(int a=1;a<=gg;a++)
			{																				
				link * t=L->next;
				int o=1,k=1,s=1; 
				 do
				{	
					if (t->date==d->date) 
					{    o=2;
						break;
					}			
				if(t->next==NULL)	
				{
					s=2;
				}				
				t=t->next;							        
				}while (s!=2);												   											
				if(o==1)
				{						
					r->next = d;
	        		r = d;
	        		d = d->next;
				}
				else
				{	d = d->next;
					continue;
				}
			}
		}
		c-=1;
	}

L1->next = NULL;
L2->next = NULL;
return L;
}
void *Outputs(link *L)//输出链表元素 
{	
	link *f=L->next;
	while(f)
	{
		printf("%d ",f->date);
		f=f->next;
	}
	printf("\n");
}

int main()
{
	system("color FD") ;//改变输出字体颜色 
	link *L1;
	link *L2;
	link *L3;
	printf("请输入L1的数值\n"); 
	L1=Generate();
	printf("请输入L2的数值\n");
	L2=Generate();
	printf("即将输出L3的数值\n");	
	Outputs(L1);	
	Outputs(L2);
	L3=Aggregate(L1,L2);	
	Outputs(L3);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值