#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;
}
转载于:https://www.cnblogs.com/zhangshu/archive/2011/05/09/2041381.html