已知两个非降序链表序列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<malloc.h>
typedef struct node{
int data;
struct node *next;
}*LNode,Node;
LNode Read(){
LNode head=NULL,L=NULL;
int a;
while (1)
{
scanf("%d",&a);
if (a == -1) break;
LNode p = (LNode)malloc(sizeof(struct node));
p->data = a;
p->next = NULL;
if(head==NULL){
head=p;
L=head;
}
else{
L->next = p;
L = p;
}
}
return head;
}
int main(void)
{
LNode L1,L2,L3=NULL;
LNode p,q,m;
L1=Read();
L2=Read();
m=(LNode)malloc(sizeof(Node));
m->next=NULL;
L3=m;
p=L1,q=L2;
while(p&&q){
if(p->data>q->data){
m->next=q;
q=q->next;
}
else{
m->next=p;
p=p->next;
}
m=m->next;
}
while(q){
m->next=q;
m=m->next;
q=q->next;
}
while(p){
m->next=p;
m=m->next;
p=p->next;
}
int flag=0;
for(p=L3->next;p!=NULL;p=p->next){
if(flag){
printf(" ");
}
else{
flag=1;
}
printf("%d",p->data);
}
if(!flag){
printf("NULL");
}
return 0;
}
1 2 3 4 5 6 8 10