0
点赞
收藏
分享

微信扫一扫

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

北溟有渔夫 2022-03-25 阅读 65
数据结构

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

#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("\n");
	printf("请输入L2的数值\n");
	L2=Generate();
	printf("即将输出L3的数值\n");	
	Outputs(L1);	
	Outputs(L2);
	L3=Aggregate(L1,L2);	
	Outputs(L3);
}
举报

相关推荐

0 条评论