7—1两个有序链表序列的合并

已知两个非降序链表序列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;

 }

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值