。。。。。

#include <stdio.h>

#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

 typedef struct node

 { //单链表的结构定义

  int data;

  struct node *next;

}node,*LinkList;

 

node *StartList(node *L){ //初始化单链表 并设置为空表

    L=(node*)malloc(sizeof(node));

 L->next=NULL;

 return L;

}

void PrintList(node *L){//打印单链表的函数

 printf("整个单链表的元素为:");

 while(L->next!=NULL)

 {//遍历

  printf("%d ",L->next->data);

  L=L->next;

 }

 printf("\n");

}

LinkList MergeLinkList(LinkList La,LinkList Lb){//融合两个单链表

    LinkList pa,pb;

    pa=La->next;

    pb=Lb->next;

    LinkList pc=La;//以La进行链的连接操作

    while(pa&&pb){

        

  if(pa->data<=pb->data)//pa里数据比pb小,就连接pa指向的结点,pa指向La的后一个

        {

            LinkList p=pa->next;

            pa->next=NULL;

            pc->next=pa;

            pc=pc->next;

            pa=p;

        }

        else

  {//pb里数据较小,就连接pb指向的结点,pb指向Lb的后一个

            LinkList p=pb->next;

            pb->next=NULL;

            pc->next=pb;

            pc=pc->next;

            pb=p;

        }

    }

    pc->next=pa?pa:pb;//合并剩下的没遍历完的部分

    return La;

}

 

void CreateList(node *a,int n);

int main()

{//主函数写调用函数

 node *L1,*L2;//L1,L2分别为两个插入的单链表

 int n,m;//输入链表的长度

 printf("输入第一个链表长度:");

 scanf("%d",&n);

 printf("\n");

 L1=StartList(L1);

 L2=StartList(L2);//分别初始化

 //构建第一个单链表

 printf("下面构建第一个单链表\n");

 CreateList(L1,n);

 PrintList(L1);

 printf("\n"); //构建第二个单链表

printf("下面构建第二个单链表\n");

 printf("输入第一个链表长度:");

 scanf("%d",&m);

 printf("\n");

 CreateList(L2,m);

 PrintList(L2);

 printf("\n"); //合成两个链表,使其有序

 printf("合并两个单链表,");

 MergeLinkList(L1,L2);

 PrintList(L1);

 return 0;

 }

 

 

void CreateList(node *a,int n){

 node *p,*pnew;

 int i;

 p = a;

 printf("请输入元素,用空格分隔:");

 for(i = 0;i < n;i++)

 {

 pnew = (node*)malloc(sizeof(node));

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

 pnew->next = NULL;

 p->next = pnew;

 p = p->next;

}

 

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值