单链表的归并1

要求:创建两个无头结点的单链表,头指针分别为ha,hb,链中有数据data和指针域next,两个链表的数据都按照不递减存放,现在要求将hb归并到ha表中,归并后要求ha依然递增有效,归并中的ha表中的元素如果hb表中也有,则该元素不再重复归并到ha中,hb在算法中不能被破坏。

#include<iostream>
using namespace std;
struct node
{
	int data;
	node* next;
};
node *ha,*hb;
int main()
{
	int n,m;
	cin>>n;
	node *pa,*pb,*pre,*r;
	ha=(node*)malloc(sizeof(node));
	ha->next=NULL;
	pa=ha;
	while(n--)
	{
		pb=(node*)malloc(sizeof(node));
		cin>>pb->data;
		pa->next=pb;
		pa=pb;
		pa->next=NULL;
	}
	cin>>m;
	hb=(node*)malloc(sizeof(node));
	hb->next=NULL;
	pb=hb;
	while(m--)
	{
		pa=(node*)malloc(sizeof(node));
		cin>>pa->data;
		pb->next=pa;
		pb=pa;
		pb->next=NULL;
	}
	r=hb;
	hb=hb->next;
	free(r);
	pre=ha;
	pa=ha->next;
	pb=hb;
	while(pa&&pb)
	{
		if(pa->data<pb->data)
		{
			pre=pa;
			pa=pa->next;
		}
		else if(pa->data==pb->data)
		{
			pb=pb->next;
		}
		else {
			node *x;
			x=(node*)malloc(sizeof(node));
			x->data=pb->data;
			pre->next=x;
			pre=x;
			pre->next=pa;
			pb=pb->next;
		}
	}
	if(pb)
	{
		node* x;
		x=(node*)malloc(sizeof(node));
		x->data=pb->data;
		pa=x;
		pa->next=NULL;
		pre->next=pa;
		pb=pb->next;
	}
	while(pb)
	{
		if(pb->data==pa->data)
			pb=pb->next;
		else if(pb->data>pa->data)
		{
			node *x;
			x=(node*)malloc(sizeof(node));
			x->data=pb->data;
			pa->next=x;
			pa=x;
			pa->next=NULL;
			pb=pb->next;
		}
	}
	r=ha;
	ha=ha->next;
	free(r);
	while(ha)
	{
		cout<<ha->data<<" ";
		ha=ha->next;
	}
	cout<<endl;
	system("pause");
	return 0;
}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值