链表实现输入两个整数数组,A B,将B与A合并,并且排序

实现两个整数数组进行合并,并且对合并的数组进行排序(通过链表实现);

代码如下:

/*****************************************************************
实现一个函数,功能为输入两个整数数组,A,B 实现A=A+B,也就是将A与B进行合并
并且对数组A里面的数字大小进行排序。
******************************************************************/
#include<stdio.h>
#include<stdlib.h>
//创建结构体
struct ptr
{
	int data;
	struct ptr* next;
};
//创建链表头
struct ptr* creat_headlist()
{
	struct ptr*Head_list=(struct ptr*)malloc(sizeof(struct ptr));
	Head_list->next=NULL;
	return Head_list;
}
//创建结点
struct ptr* creat_conection_polt(int data)
{
	struct ptr*c_list=(struct ptr*)malloc(sizeof(struct ptr));
	c_list->data=data;
	c_list->next=NULL;
	return c_list;
}
//插入结点
void in_set(struct ptr * Head_list,int data)
{
	struct ptr*set_list=creat_conection_polt(data);
	set_list->next=Head_list->next;
	Head_list->next=set_list;
}
//找到此链表的最后一个结点
struct ptr* last_list(struct ptr*Head_list)
{
	struct ptr*next_list_last=(struct ptr*)malloc(sizeof(struct ptr));
	while(1)
	{
		if(Head_list->next==NULL)
		{
			return Head_list;
			break;
		}
		else
		{
			next_list_last=Head_list->next;
			Head_list=next_list_last;
		}
	}
}
//对此链表的数据进行从小到大的排序利用冒泡排序法进行操作
void pai_xu(struct ptr* Head_list)
{
	struct ptr*next_ptri=(struct ptr*)malloc(sizeof(struct ptr));
	struct ptr*next_ptrj=(struct ptr*)malloc(sizeof(struct ptr));
	for(next_ptri=Head_list->next;next_ptri!=NULL;next_ptri=next_ptri->next)
	{
		for(next_ptrj=next_ptri->next;next_ptrj!=NULL;next_ptrj=next_ptrj->next)
		{
			if(next_ptri->data>next_ptrj->data)
			{
				int ptri=next_ptri->data;next_ptri->data=next_ptrj->data;next_ptrj->data=ptri;
			}
		}
	}
	free(next_ptri);
	free(next_ptrj);
}
//打印链表
void print_list(struct ptr* Head_list)
{
	struct ptr* next_list=(struct ptr*)malloc(sizeof(struct ptr));
	while(1)
	{
		if(Head_list->next==NULL)
		{
			return;
		}
		else
		{
			next_list=Head_list->next;
			Head_list=next_list;
			printf("%d",Head_list->data);
			printf("\n");
		}
	}
}
//主函数
main()
{
	struct ptr* h_list=creat_headlist();
	struct ptr* H_list=creat_headlist();
	int shuzi,shuzi_again;

	while(1)
	{
		printf("请输入整数:\n");
		scanf("%d",&shuzi);
		in_set(h_list,shuzi);
		printf("是否还需要输入?Y/N\n");
		setbuf(stdin,NULL);
		char panduan;
		scanf("%c",&panduan);
		if(panduan=='N'||panduan=='n')
		{
			break;
		}
	}
	while(1)
	{
		printf("请输入整数:\n");
		scanf("%d",&shuzi_again);
		in_set(H_list,shuzi_again);
		printf("是否还需要输入?Y/N\n");
		setbuf(stdin,NULL);
		char panduan_again;
		scanf("%c",&panduan_again);
		if(panduan_again=='N'||panduan_again=='n')
		{
			break;
		}
	}
	struct ptr* l_list=last_list(h_list);
	l_list->next=H_list->next;
	pai_xu(h_list);
	print_list(h_list);
}

总结下,首先是进行链表的创建,最后是找到第一个链表的最后一个结点,将其与第二个链表的第一个结点连接,组成一个新的链表。
关于排序,采用的是冒泡排序的方法,结点的值进行比较,
第一次循环将最小的放在第一个结点,第二次将第二小的放在第二个结点,以此列推。。。。。。
冒泡排序:如下

void pai_xu(struct ptr* Head_list)
{
	struct ptr*next_ptri=(struct ptr*)malloc(sizeof(struct ptr));
	struct ptr*next_ptrj=(struct ptr*)malloc(sizeof(struct ptr));
	for(next_ptri=Head_list->next;next_ptri!=NULL;next_ptri=next_ptri->next)
	{
		for(next_ptrj=next_ptri->next;next_ptrj!=NULL;next_ptrj=next_ptrj->next)
		{
			if(next_ptri->data>next_ptrj->data)
			{
				int ptri=next_ptri->data;next_ptri->data=next_ptrj->data;next_ptrj->data=ptri;
			}
		}
	}
	free(next_ptri);
	free(next_ptrj);
}

最终实现这一结果,谢谢大家,如有更好的意见,欢迎评论留言。
谢谢大家!