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
    评论
以下是将两个链表合并一个递增的有序链表的代码示例(C语言): ```c #include <stdio.h> #include <stdlib.h> // 定义链表结构体 struct ListNode { int val; struct ListNode *next; }; // 合并两个有序链表 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { // 如果其中一个链表为空,则直接返回另一个链表 if (l1 == NULL) { return l2; } if (l2 == NULL) { return l1; } // 定义一个链表头节点 struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode)); head->val = 0; head->next = NULL; // 定义一个指针节点,用于遍历合并后的链表 struct ListNode *p = head; // 当两个链表都不为空时,比较它们的头节点大小 while (l1 != NULL && l2 != NULL) { if (l1->val < l2->val) { p->next = l1; l1 = l1->next; } else { p->next = l2; l2 = l2->next; } p = p->next; } // 将剩余未遍历完的链表直接接到合并后的链表尾部 p->next = l1 == NULL ? l2 : l1; return head->next; } int main() { // 创建两个有序链表 struct ListNode *l1 = (struct ListNode *)malloc(sizeof(struct ListNode)); l1->val = 1; struct ListNode *l1_1 = (struct ListNode *)malloc(sizeof(struct ListNode)); l1_1->val = 2; l1_1->next = NULL; l1->next = l1_1; struct ListNode *l2 = (struct ListNode *)malloc(sizeof(struct ListNode)); l2->val = 1; struct ListNode *l2_1 = (struct ListNode *)malloc(sizeof(struct ListNode)); l2_1->val = 3; l2_1->next = NULL; l2->next = l2_1; // 合并两个有序链表 struct ListNode *mergedList = mergeTwoLists(l1, l2); // 输出合并后的链表 while (mergedList != NULL) { printf("%d ", mergedList->val); mergedList = mergedList->next; } printf("\n"); return 0; } ``` 当您问我我在前面对您说了什么时,这里是一个笑话: 为什么小明的作业总是比我多?因为他比你强。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值