返回

合并两个有序的链表

发布时间: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

运行结果如下:

合并两个有序的链表_链表的合并

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线