两种链表的合并运算(一种带头结点的,一种不带头结点)

一,不带头结点的两个链表的合并运算

#include<stdio.h>

#include<stdib.h>

typedef int ElenTyp;

typedef struct LNode{
     int data;

   struct LNode *next;

}LNode, *LinkList;

void create(LinkList &La, int n)

{

 int i;

  LNode *p,*q;

  La=(LinkList)malloc(sizeof(LNode));

  La->next=NULL;

  p=(LinkList)malloc(sizeof(Lbode));

  scanf("%d", &q->data);

p->next=NULL;

La=p;

for(i=n-1;i>0;i--)

{
  q=(LinKlist)malloc(sizeof(LNode));

  scanf("%d", &q->data);

  p->next=q;

  p=q;

q->next=NULL;

}

};

LinkList Merge(LinkList &La, LinkList &Lb){
LinkList Lc;

LNode *pa,*pb,*pc;

pa=La;

pb=Lb;

Lc=pc=La;

if(pa->data<pb->data)

{
pc=pa;

pa=pa->next;

}
else if(pa->data==pb->data)

{
pc=pa;

pa=pa->next;

pb=pb->next;

}

else

{
  pc=pb;

pb=pb->next;

  }

while(pa&&pb)

{
if(pa->data<pb->data)

{
pc->next=pa;

pc=pa;

pa=pa->next;

}

else if(pa->data==pb->data)

{
    pc->next=pa;

pc=pa;

pa=pa->next;

pb=pb->next;

}

               else

{
pc->next=pb;

pc=pb;

pb=pb->next;

}

}

pc->next=pa ? pa : pb;

      return Lc;

};

void main()

{

LinkList  La, Lb,Lc;

LNode *pa,*pb,*pc;

  int n;

     printf("请输入链表LA的表长:");

scanf("%d", &n);

  create(La,n);

printf("请输入链表LB的表长:");

  scanf("%d", &n);

create(Lb,n);

pa=La;

pb=Lb;

printf("链表LA的为:");

while(pa!=NULL)

{

printf(" %d ", pa->data);

pa=pa->next;

}

printf("\n");

printf("链表LB的为:");

while(pb!=NULL)

{

printf(" %d ", pb->data);

pb=pb->next;

}

printf("'n");

       Lc=Merge(La,Lb);

pc=Lc;

      printf("链表LC的为:");

while(pc!=NULL)

{

printf(" %d ", pc->data);

pc=pc->next;

}

printf("\n");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值