已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 3 5 -1
2 4 6 8 10 -1
输出样例:
1 2 3 4 5 6 8 10
代码实现
#include<stdio.h>
typedef struct List
{
int data;
struct List*next;
}List;
int main() //本代码所有链表均为有头结点的链表
{
int i=0;
List *L1,*L2,*L3,*p,*q,*m,*f;
L1=(List* )malloc(sizeof(List));
L1->next=NULL;
L2=(List* )malloc(sizeof(List));
L2->next=NULL;
m=(List* )malloc(sizeof(List));
m->next=NULL;
int d;
p=L1;
scanf("%d",&d);
while(d!=-1)
{
p->next=(List*)malloc(sizeof(List));
p=p->next;
p->data=d;
p->next=NULL;
scanf("%d",&d);
}
p=L2;
scanf("%d",&d);
while(d!=-1)
{
p->next=(List*)malloc(sizeof(List));
p=p->next;
p->data=d;
p->next=NULL;
scanf("%d",&d);
}
L1=L1->next;
L2=L2->next;
L3=m;
while(L1&&L2)
{
if(L1->data<L2->data)
{
L3->next=(List*)malloc(sizeof(List));
L3=L3->next;
L3->data=L1->data;
// L1=L1.data;
L3->next=NULL;
L1=L1->next;
}
else
{
L3->next=(List*)malloc(sizeof(List));
L3=L3->next;
L3->data=L2->data;
// L2=L2.data;
L3->next=NULL;
L2=L2->next;
}
}
if(L1)
{
while(L1)
{
L3->next=(List*)malloc(sizeof(List));
L3=L3->next;
L3->data=L1->data;
L1=L1->next;
L3->next=NULL;
}
}
else if(L2)
{
while(L2)
{
L3->next=(List*)malloc(sizeof(List));
L3=L3->next;
L3->data=L2->data;
L2=L2->next;
L3->next=NULL;
}
}
p=m->next;
while(p)
{
if(i==0)
{
printf("%d",p->data);
p=p->next;
i++;
}
else
{
printf(" %d",p->data);
p=p->next;
}
}
if(m->next==NULL) //链表为空,输出NULL
{
printf("NULL\n");
}
return 0;
}