链表 归并

来源:互联网 发布:cms管理系统是什么 编辑:程序博客网 时间:2024/06/07 00:42
#include<stdio.h>  #include<malloc.h>  typedef struct node  {      int date;      struct node *next;  }node,*lnode;  void createlist(lnode &l,int n); //在链表 后边不断插入正序插入链表  void createlist2(lnode &l,int n); //在链表 前边一位不断插入节点  void display(lnode l);           //显示链表  void display2(lnode l);  void allinlist(lnode &l1,lnode &l2,lnode &l3);void inlist(lnode &l,int i,int e);//插入e 在i的位置上  void deletelist(lnode &l,int i);//删除e 在i的位置上  int main()  {      int i,e,count1,count2;      lnode l1,l2,l3;printf("输入第一个链表的数目:");scanf("%d",&count1);createlist(l1,count1);printf("输入第二个链表的数目:");scanf("%d",&count2);    createlist(l2,count2);allinlist(l1,l2,l3);      display(l3);  printf("\n");    display(l1);printf("\n");display(l2);    return 0;  }  void createlist(lnode &l,int n)  {      int i;      lnode p,q;      l=(lnode)malloc(sizeof(node));      l->next=NULL;      q=l;      printf("输入%d个数据\n",n);      for(i=0;i<n;i++)      {          p=(lnode)malloc(sizeof(node));            scanf("%d",&p->date);          q->next=p;          q=q->next;      }      q->next=NULL;  }  void createlist2(lnode &l,int n)  {      int i;      lnode p;      l=(lnode)malloc(sizeof(node));      l->next=NULL;      printf("输入数据\n");      for(i=0;i<n;i++)      {          p=(lnode)malloc(sizeof(node));            scanf("%d",&p->date);          p->next=l->next;          l->next=p;      }        }  void display(lnode l)  {      lnode p; p=l->next;   while(p!=NULL)   {printf("%d ",p->date);    p=p->next;   }/*for(p=l->next;p!=NULL;p=p->next)      {          printf("%d ",p->date);    }  */  }  void display2(lnode l)  {      if(l==NULL)      {          return;           }      else      {          printf("%d",l->date);      //  l=l->next;          display2(l->next);      }  }  void inlist(lnode &l,int i,int e)  {      lnode p,s;      p=l;      int j;      j=0;      while(p&&j<i-1)      {          p=p->next;          j++;      }      s=(lnode)malloc(sizeof(node));      s->date=e;      s->next=p->next;      p->next=s;  }  void deletelist(lnode &l,int i)  {      lnode p;      p=l;      int j;      j=0;      while(p&&j<i-1)      {          j++;          p=p->next;      }      p->next=p->next->next;      }  void allinlist(lnode &la,lnode &lb,lnode &lc){lnode pa,pb,pc;pa=la->next;pb=lb->next;lc=pc=la;while(pa&&pb){if(pa->date<=pb->date){pc->next=pa;pc=pc->next;pa=pa->next;}else{pc->next=pb;pc=pc->next;pb=pb->next;}}pc->next=pa?pa:pb;}