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

来源:互联网 发布:怎样设置微博域名 编辑:程序博客网 时间:2024/04/29 23:25

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

#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");

}

0 0