合并两个有序链表,两个链表合并为一个有序链表
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用1表示序列的结尾(1不属于这个序列)。数字用空格间隔。
输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出零。
#包含标准视频
数据类型说明结构限制节点
{
(同Internationalorganizations)国际组织数据;
结构节点*下一个
}LNode,*链接列表
链表ListCreat1()
{
链表L1,尾巴,p;
L1=(链表)malloc(sizeof(LNode));
L1-next=NULL;
尾巴=L1;
int n;
while(scanf(%d ,n) n!=-1)
{
p=(LinkList)malloc(sizeof(LNode));
p-next=NULL;
p-data=n;
tail-next=p;
尾巴=p;
}
归还L1;
}
链表ListCreat2()
{
链表L2,尾巴,p;
L2=(链表)malloc(sizeof(LNode));
L2-next=NULL;
尾巴=L2;
int m;
while(scanf(%d ,m) m!=-1)
{
p=(LinkList)malloc(sizeof(LNode));
p-next=NULL;
p-data=m;
tail-next=p;
尾巴=p;
}
归还L2;
}
链接列表合并(L1链接列表,L2链接列表)
{
链表p1,p2,尾部
p1=L1-下一个;
p2=L2-下一个;
L1-next=NULL;
尾巴=L1;
免费(L2);
while(p1 p2)
{
如果(p1-数据p2-数据)
{
tail-next=P1;
tail=p1
P1=P1-下一个;
}
其他
{
tail-next=p2;
尾部=p2
p2=p2-next;
}
}
如果(p1!=空)
tail-next=P1;
其他
tail-next=p2;
}
无效打印(链接列表L1)
{
链表p;
p=L1下一个;
if(p==NULL)
{
printf( NULL \ n );
}
int k=0;
while(p)
{
k;
如果(k==1)
{
printf(%d ,p-data);
}
其他
{
printf( %d ,p-data);
}
p=p-next;
}
printf( \ n );
}
int main()
{
腰神经2联系人列表;
L2联系人列表;
L1=list creat 1();
L2=list creat 2();
合并(L1、L2);
印刷品(L1);
返回0;
}输入样例:
1 3 5 -1
2 4 6 8 10 -1
运行结果如下:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。