2個有序鏈表的合併

#include<iostream>
using namespace std;
typedef struct head
{
	int a;
	struct head *next;
}NLode;


void intial(NLode **head)
{
	*head=(NLode *)malloc(sizeof(NLode));
	(*head)->next=NULL;
}


void insert(NLode *head,int a)
{
	NLode *p,*q;
	p=head;
	q=(NLode*)malloc (sizeof(NLode));
	
	while(p->next!=NULL)
	{
		p=p->next;

	}
	q->a=a;
	q->next=p->next;
	p->next=q;
	
}

NLode *Merge(NLode *head1,NLode *head2)
{
	if(head1->next==NULL)
		return head2;
	if(head2->next==NULL)
		return head1;
	NLode *head3,*p1,*p2,*p3,*p;
	head3=(NLode *)malloc(sizeof(NLode));
	p1=head1->next;
	p2=head2->next;
	p3=head3;
	while(p1!=NULL &&p2!=NULL)
	{
		if(p1->a>p2->a)
		{
			p=(NLode*)malloc(sizeof(NLode));
			p->next=NULL;
			p->a=p2->a;
			p3->next=p;
			p3=p3->next;
			p2=p2->next;
		}
		else
		{
		    p=(NLode*)malloc(sizeof(NLode));
			p->next=NULL;
			p->a=p1->a;
			p3->next=p;
			p3=p3->next;
			p1=p1->next;
		}
	}
	while(p1!=NULL)
	{
			p=(NLode*)malloc(sizeof(NLode));
			p->next=NULL;
			p->a=p1->a;
			p3->next=p;
			p3=p3->next;
			p1=p1->next;
	}
	while(p2!=NULL)
	{
		   p=(NLode*)malloc(sizeof(NLode));
		   p->next=NULL;
			p->a=p2->a;
			p3->next=p;
			p3=p3->next;
			p2=p2->next;
	}
	return head3;

}


void printSL(NLode *head)
{
	NLode *p;
	p=head->next;
	while(p!=NULL)
	{
		
		cout<<p->a<<"   ";
		p=p->next;
	}
}

void main()
{
	NLode *head1,*head2,*head3;
 
	intial(&head1);
	intial(&head2);
	int a,b,num=0,i;
	cin>>a;
	cin>>b;
	for(i=0;i<a;i++)
	{
		cin>>num;
		insert(head1,num);
	}
	num=0;
		for(i=0;i<b;i++)
	{
		cin>>num;
		insert(head2,num);
	}
		head3=Merge(head1,head2);
		cout<<"A:"<<endl;
		printSL(head1);
		cout<<endl;
		cout<<"B:"<<endl;
		printSL(head2);
		cout<<endl;
		cout<<"C:"<<endl;
		printSL(head3);
		cout<<endl;
		

	system("pause");

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章