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 }