#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; }