合并两个有序的链表
发布时间:2022-09-16 02:41:58 425 相关标签:
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL
。
#include
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList ListCreat1()
{
LinkList L1,tail,p;
L1=(LinkList)malloc(sizeof(LNode));
L1->next=NULL;
tail=L1;
int n;
while(scanf("%d",&n)&&n!=-1)
{
p=(LinkList)malloc(sizeof(LNode));
p->next=NULL;
p->data=n;
tail->next=p;
tail=p;
}
return L1;
}
LinkList ListCreat2()
{
LinkList L2,tail,p;
L2=(LinkList)malloc(sizeof(LNode));
L2->next=NULL;
tail=L2;
int m;
while(scanf("%d",&m)&&m!=-1)
{
p=(LinkList)malloc(sizeof(LNode));
p->next=NULL;
p->data=m;
tail->next=p;
tail=p;
}
return L2;
}
LinkList Merge(LinkList L1,LinkList L2)
{
LinkList p1,p2,tail;
p1=L1->next;
p2=L2->next;
L1->next=NULL;
tail=L1;
free(L2);
while(p1&&p2)
{
if(p1->datadata)
{
tail->next=p1;
tail=p1;
p1=p1->next;
}
else
{
tail->next=p2;
tail=p2;
p2=p2->next;
}
}
if(p1!=NULL)
tail->next=p1;
else
tail->next=p2;
}
void Print(LinkList L1)
{
LinkList p;
p=L1->next;
if(p==NULL)
{
printf("NULL\n");
}
int k=0;
while(p)
{
k++;
if(k==1)
{
printf("%d",p->data);
}
else
{
printf(" %d",p->data);
}
p=p->next;
}
printf("\n");
}
int main()
{
LinkList L1;
LinkList L2;
L1=ListCreat1();
L2=ListCreat2();
Merge(L1,L2);
Print(L1);
return 0;
}
输入样例:
1 3 5 -1
2 4 6 8 10 -1
运行结果如下:

文章来源: https://blog.51cto.com/u_15765782/5664767
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报