
1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct Node{ 4 int data; 5 Node*next; 6 }Node,*LinkList; 7 InitLinkList(LinkList*L) 8 { 9 *L=(LinkList)malloc(sizeof(Node)); 10 (*L)->next=NULL; 11 } 12 CreateLinkList(LinkList L) 13 { 14 int length,e; 15 Node*t,*q=L; 16 scanf("%d",&length); 17 for(int i=1;i<=length;i++) 18 { 19 scanf("%d",&e); 20 t=(LinkList)malloc(sizeof(Node)); 21 t->data=e; 22 t->next=q->next; 23 q->next=t; 24 q=t; 25 } 26 27 } 28 LinkList MergeLinkList(LinkList A,LinkList B) 29 { 30 LinkList C=A; 31 Node*a=A->next,*b=B->next,*c=A,*q; 32 while(a&&b) 33 { 34 if(a->data<=b->data)a=a->next; 35 else if(a->data>b->data) 36 { 37 q=b;//此处应特设一个q,让q与b分离,否则会造成死循环 38 b=b->next; 39 q->next=c->next; 40 c->next=q; 41 } 42 c=c->next; 43 } 44 if(b)c->next=b; 45 46 return C; 47 } 48 ReverseLinkList(LinkList L) 49 { 50 Node*p,*q,*r; 51 p=L->next,q=p->next,r=q->next; 52 p->next=NULL; 53 while(r) 54 { 55 q->next=p; 56 p=q; 57 q=r; 58 r=r->next; 59 } 60 L->next=q; 61 q->next=p; 62 } 63 OrderLinkList(LinkList L) 64 { 65 Node*t=L->next; 66 while(t) 67 { 68 printf("%d ",t->data); 69 t=t->next; 70 } 71 } 72 int main() 73 { 74 LinkList A,B,C; 75 InitLinkList(&A),InitLinkList(&B),InitLinkList(&C); 76 CreateLinkList(A),CreateLinkList(B); 77 C=MergeLinkList(A,B); 78 ReverseLinkList(C); 79 OrderLinkList(C); 80 return 0; 81 82 }