两个有序链表序列的合并

#include<stdio.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,LinkList;//这里实际上是两句话typedef struct LNode LNode和typedef //struct LNode Linklist将结构体类型struct LNode重命名为LNode将struct LNode //*重命名为LinkList
在这里插入图片描述

LinkList creat_list();//声明creat_list函数
LinkList hb(LinkList L1,LinkList L2);//声明hb函数
void print(LinkList L);//声明print函数
int main()
{
LinkList L1=creat_list();
LinkList L2=creat_list();
LinkList L;
L=hb(L1,L2);
print(L);
return 0;
}
LinkList creat_list()//尾插法建表,带有头结点
{
LinkList L=new struct LNode;
L->next=NULL;
int e;
scanf("%d",&e);
LinkList r=L;
while(e!=-1)
{
LinkList s=new struct LNode;
s->next=NULL;
s->data=e;
s->next=r->next;
r->next=s;
r=s;
scanf("%d",&e);
}
return L;
在这里插入图片描述

}
LinkList hb(LinkList L1,LinkList L2)
{
LinkList r,L;//struct LNode r ,l
r=L=L1;//直接利用L1的头结点,不用另开空间了,最后释放L2的头结点,
//这里没有释放也对了
LinkList p1=L1->next,p2=L2->next;//此时p1date域放1,p2date域放2(根据
//题意)
while(p1&&p2)//当p1,p2不为null时
{
if(p1->data<=p2->data)
{
r->next=p1;
r=p1;
p1=p1->next;
}
else
{
r->next=p2;
r=p2;
p2=p2->next;
}
}
在这里插入图片描述

r->next=p1?p1:p2;//剩余的不用动,直接接上//比完加完之后还剩一个date最
//大的节点p,直接加到后面
return L->next;//返回首元,直接打印
}

void print(LinkList L)//注意打印时的格式,设置一个标识符
{
if(!L) printf(“NULL”);
int flag=0;
LinkList p=L;
while§//一直遍历到null
{
if(flag!=0) printf(" “);
printf(”%d",p->data);
p=p->next;
flag=1;
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值