已知两个非降序链表序列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>
#include <stdlib.h>
struct LNode{
int data;
struct LNode *next;
};
struct LNode*creatlist()
{
struct LNode *p,*t,*head;
int i;
head=(struct LNode *)malloc(sizeof(struct LNode));
t=head;
while(scanf("%d",&i)&&i>=0)
{
p=(struct LNode*)malloc(sizeof(struct LNode));
p->data=i;
t->next=p;
p->next =NULL;
t=p;
}
return head;
}
struct LNode*ADDlist(struct LNode *L1,struct LNode *L2)
{
struct LNode *p1,*p2,*p3,*L3;
p1=L1->next;
p2=L2->next ;
L3=(struct LNode*)malloc(sizeof(struct LNode));
L3->next =NULL;
p3=L3;
while(p1&&p2)
{
if(p1->data>p2->data)
{
p3->next =p2;
p2=p2->next ;
}else{
p3->next =p1;
p1=p1->next ;
}
p3=p3->next ;
}
if(p1)
{
p3->next =p1;
}else{
p3->next =p2;
}
return L3;
}
void print(struct LNode *L3)
{
struct LNode *p;
p=(struct LNode *)malloc(sizeof(struct LNode));
p=L3->next;
if(p==NULL)
{
printf("NULL");
return;
}
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
if(p!=NULL)
printf(" ");
}
}
int main()
{
struct LNode *L1,*L2,*L3;
L1=creatlist();
L2=creatlist();
L3=ADDlist(L1,L2);
print(L3);
return 0;
}