合并链表


【问题描述】
 两个非降序链表的并集,例如将链表1->2->3 和 2->3->5 并为 1->2->3->5,只能输出结果,不能修改两个链表的数据。

【输入形式】
 第一行为第一个链表的各结点值,以空格分隔。
 第二行为第二个链表的各结点值,以空格分隔。

【输出形式】
 合并好的链表,以非降序排列,值与值之间以空格分隔。

【样例输入】
 4 7 10 34
 1 4 6 29 34 34 52

【样例输出】
 1 4 6 7 10 29 34 52

【评分标准】
 要使用链表实现,否则不能得分。

#include
#include
#include
using namespace std;
string s1,s2;
int num1,num2;
int IsF1,IsF2;
int z1,z2;
int sum1,sum2;
int num[9999];
int last;
typedef struct Node
{
	int x;
	Node *next;
}Node1,Node2;
int main()
{
	getline(cin,s1);
	Node1 *head1=(Node1*)malloc(sizeof(Node1));
	head1->next=NULL;
	Node1 *ne1,*tail1=head1;
	Node2 *head2=(Node2*)malloc(sizeof(Node2));
	head2->next=NULL;
	Node2 *ne2,*tail2=head2;
	while(1)
	 {
	 	if(s1[z1]=='\0')
	 	{
	 		ne1=(Node1*)malloc(sizeof(Node1));
	 		ne1->x=num1;
	 		tail1->next=ne1;
	 		tail1=ne1;
	 		break;
		 }
	 	if(s1[z1]>='0'&&s1[z1]<='9')
	 	 {
	 	 	IsF1=1;
		 	num1*=10;
		 	num1+=s1[z1]-'0';
		 }
	 	if(s1[z1]==' ')
	 	 {
	 	 	if (IsF1)
	 	 	{
	 	 		ne1=(Node1*)malloc(sizeof(Node1));
	 			ne1->x=num1;
	 			tail1->next=ne1;
	 			tail1=ne1;
			  }
			num1=0;
		  }
		z1++;
	 }
	tail1->next=NULL;
	getline(cin,s2);
	while(1)
	 {
	 	if(s2[z2]=='\0')
	 	{
	 		ne2=(Node2*)malloc(sizeof(Node2));
	 		ne2->x=num2;
	 		tail2->next=ne2;
	 		tail2=ne2;
	 		break;
		 }
	 	if(s2[z2]>='0'&&s2[z2]<='9')
	 	 {
	 	 	IsF2=1;
		 	num2*=10;
		 	num2+=s2[z2]-'0';
		 }
	 	if(s2[z2]==' ')
	 	 {
	 	 	if (IsF2)
	 	 	{
	 	 		ne2=(Node2*)malloc(sizeof(Node2));
	 			ne2->x=num2;
	 			tail2->next=ne2;
	 			tail2=ne2;
			  }
			num2=0;
		  }
		z2++;
	 }
	tail2->next=NULL;
	Node1 *i=head1->next;
	Node2 *j=head2->next;
	while(1)
	{
		if(i==NULL)
		 {
		 	for(Node2 *o=j;o!=NULL;o=o->next)
		 	 if((o->x)>last)
			  printf("%d ",o->x);
		 	break;
		 }
		else if(j==NULL)
		 {
		 	for(Node1 *o=i;o!=NULL;o=o->next)
		 	 if((o->x)>last)
		 	  printf("%d ",o->x);
		 	break;
		 }
		else
		 {
			if(((i->x)<(j->x)))
			 {
			 	if((i->x)>last)
			 	 printf("%d ",i->x);
			 	last=i->x;
			 	i=i->next;
			 }
			else if((i->x)>(j->x))
			 {
			 	if((j->x)>last)
				 printf("%d ",j->x);
				last=j->x;
				j=j->next;
			 }
			else
			 {
			 	if((j->x)>last)
			 	 printf("%d ",j->x);
			 	last=j->x;
			 	i=i->next;
			 	j=j->next;
			 }
		 }
		}
}