#include #include //node结点 typedef struct node{ int data; struct node *next; }*LinerList; //排序法 void paixu(LinerList head,int n) { int i=0,j=0,temp; LinerList p2; LinerList p1; for(p1=head;inext) for(p2=p1->next;jnext) { if(p1->data>p2->data) { temp=p2->data; p2->data=p1->data; p1->data=temp; } } } //新建一个链表 void CreateLinerList(LinerList *head,int n) { int data; LinerList p,tail; printf("请输入链表对应的数据元素:\n"); scanf("%d",&data); p=(LinerList)malloc(sizeof(struct node)); p->data=data; p->next=*head; *head=p; tail=p; while(n>1) { scanf("%d",&data); p=(LinerList)malloc(sizeof(struct node)); p->data=data; p->next=NULL; tail->next=p; tail=p; n--; } } //显示一个链表 void Show(LinerList p) { while(p!=NULL) { printf("%-6d",p->data); p=p->next; } printf("\n"); } //归并两个链表 void Combine(LinerList* ha,LinerList hb) { LinerList current,last,other; while(hb!=NULL) { other=(LinerList)malloc(sizeof(struct node)); other->data=hb->data; current=*ha; while(other->data>current->data&¤t->next!=NULL) { last=current; current=current->next; } if(other->data<=current->data) if(current==*ha) { other->next=*ha; *ha=other; hb=hb->next; } else if(other->data==current->data) { hb=hb->next; } else{ other->next=current; last->next=other; hb=hb->next;} else{ other=hb; current->next=other; } } } int main() { LinerList ha=NULL,hb=NULL; int a,b; printf("请输入ha的数据个数a:\n"); scanf("%d",&a); CreateLinerList(&ha,a); paixu(ha,a); printf("请输入hb的数据个数b:\n"); scanf("%d",&b); CreateLinerList(&hb,b); paixu(hb,b); printf("链表ha:"); Show(ha); printf("链表hb:"); Show(hb); printf("\n"); printf("---------------------------------------------------\n"); Combine(&ha,hb); printf("合并后的链表ha为:"); Show(ha); printf("合并后的链表hb为:"); Show(hb); }