归并两个递增链表至递减链表

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define flag 0

typedef int DataType;

typedef struct Node

{

    DataType data;

    struct Node *next;

}LNode,*LinkList;

LinkList Creat_LinkList()//创建带头结点的链表(从尾部插入)

{

     LinkList L;

     LNode *s,*r;

     int x;

     s=(LNode *)malloc(sizeof(LNode));

     s->next=NULL;

     L=r=s;

     scanf("%d",&x);

     while(x!=flag)

     {

          s=(LNode *)malloc(sizeof(LNode));

          s->data=x;

          if(L->next==NULL)

              L->next=s;

          else

              r->next=s;

          r=s;

          scanf("%d",&x);

     }

     if(r)

         r->next=NULL;//此处千万记得写上,不然创建的链表尾节点不为空

 return L; }

LinkList merge(LinkList A,LinkList B)//归并算法

{

     LinkList C;

     LNode *p,*q,*s;

     p=A->next;

     q=B->next;

     C=A;

     C->next=NULL;

     while(p&&q)

     {

         if(p->data<q->data)

         {

             s=p;

             p=p->next;

         }

         else

         {

             s=q;

             q=q->next;

         }

         s->next=C->next;

         C->next=s;

     }

     if(p==NULL)

     {

         p=q;

     }

     while(p)

     {

         s=p;

         p=p->next;

         s->next=C->next;

         C->next=s;

     }

     return C;

}

int main()

{

      LinkList A,B;

      A=Creat_LinkList();

      B=Creat_LinkList();   

      LinkList H;

      H=merge(A,B); 

      LNode *p;

      p=H->next;

      while(p)

      {

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

          p=p->next;

      }

      printf("\n");

      system("pause");

      return 0;

}

你可能感兴趣的:(链表)