首页 > 其他 > 详细

单链表的归并1

时间:2014-01-24 06:17:41      阅读:409      评论:0      收藏:0      [点我收藏+]

要求:创建两个无头结点的单链表,头指针分别为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

原文:http://blog.csdn.net/killer_in_silence/article/details/18711175

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!