#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;
}
posted on 2011-05-09 17:48  枫叶飘泪  阅读(318)  评论(0编辑  收藏  举报