单链表的归并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;
}




 

单链表的归并1

上一篇:UVa 11549 Calculator Conundrum / floyd判圈算法


下一篇:错误:One or more post-processing actions failed. Consult the OPP service log for details