1 #include <cstdio>
2 #include <cassert>
3
4 typedef struct node {
5 int data;
6 node * next;
7 }Node, *pNode;
8
9 pNode CreateList() {
10 pNode head, p1, p2;
11 p1 = new Node;
12 printf("Please input data: \n");
13 scanf("%d", &p1->data);
14 int n = 0;
15
16 while (p1->data != 0) {
17 n++;
18 if (n == 1)
19 head = p1;
20 else
21 p2->next = p1;
22 p2 = p1;
23 p1 = new Node;
24 scanf("%d", &p1->data);
25 }
26 p2->next = NULL;
27 return head;
28 }
29
30 void Sort(pNode head) {
31 for (pNode p = head; p != NULL; p = p->next) {
32 for (pNode q = p->next; q != NULL; q = q->next) {
33 if (q->data < p->data) {
34 int tmp = p->data;
35 p->data = q->data;
36 q->data = tmp;
37 }
38 }
39 }
40 }
41
42 pNode Merge(pNode head1, pNode head2) {
43 assert(head1 != NULL && head2 != NULL);
44
45 Sort(head1);
46 Sort(head2);
47
48 pNode head, end;
49 bool first = true;
50
51 while (true) {
52 if (head1 == NULL) {
53 end->next = head2;
54 break;
55 }
56 else if (head2 == NULL) {
57 end->next = head1;
58 break;
59 }
60 if (head1->data >= head2->data) {
61 pNode p = new Node;
62 p->data = head2->data;
63 head2 = head2->next;
64 if (first) {
65 first = false;
66 head = p;
67 }
68 else
69 end->next = p;
70 end = p;
71 }
72 else {
73 pNode p = new Node;
74 p->data = head1->data;
75 head1 = head1->next;
76 if (first) {
77 first = false;
78 head = p;
79 }
80 else
81 end->next = p;
82 end = p;
83 }
84 }
85 return head;
86 }
87
88 int main()
89 {
90 pNode plist1 = CreateList();
91 pNode plist2 = CreateList();
92
93 pNode plist3 = Merge(plist1, plist2);
94 for (pNode p = plist3; p != NULL; p = p->next)
95 printf("%d\n", p->data);
96
97 return 0;
98 }