Problem Description
分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。
Input
第一行输入M与N的值;
第二行依次输入M个有序的整数;
第三行依次输入N个有序的整数。
第二行依次输入M个有序的整数;
第三行依次输入N个有序的整数。
Output
输出合并后的单链表所包含的M+N个有序的整数。
Example Input
6 5 1 23 26 45 66 99 14 21 28 50 100
Example Output
1 14 21 23 26 28 45 50 66 99 100
01 | #include<stdio.h> |
02 | #include<stdlib.h> |
03 | struct node |
04 | { |
05 | int date; |
06 | struct node *next; |
07 | } *head1, *head2, *p, *q, *tail; |
08 | int main() |
09 | { |
10 | int m, n; |
11 | scanf ( "%d%d" , &m, &n); |
12 | head1 = ( struct node *) malloc ( sizeof ( struct node)); |
13 | head1 -> next = NULL; |
14 | head2 = ( struct node *) malloc ( sizeof ( struct node)); |
15 | head2 -> next = NULL; |
16 | tail = head1; |
17 | while (m--) |
18 | { |
19 | p = ( struct node *) malloc ( sizeof ( struct node)); |
20 | scanf ( "%d" , &p->date); |
21 | p -> next = NULL; |
22 | tail -> next = p; |
23 | tail = p; |
24 | } |
25 | tail = head2; |
26 | while (n--) |
27 | { |
28 | q = ( struct node *) malloc ( sizeof ( struct node)); |
29 | scanf ( "%d" , &q->date); |
30 | q -> next = NULL; |
31 | tail -> next = q; |
32 | tail = q; |
33 | } |
34 | p = head1 -> next; |
35 | q = head2 -> next; |
36 | tail = head1; |
37 | free (head2); |
38 | while (p && q) |
39 | { |
40 | if (p -> date < q -> date) |
41 | { |
42 | tail -> next = p; |
43 | tail = p; |
44 | p = p -> next; |
45 | tail -> next = NULL; |
46 | } |
47 | else |
48 | { |
49 | tail -> next = q; |
50 | tail = q; |
51 | q = q -> next; |
52 | tail -> next = NULL; |
53 | } |
54 | } |
55 | if (p) |
56 | { |
57 | tail -> next = p; |
58 | } |
59 | else |
60 | { |
61 | tail -> next = q; |
62 | } |
63 | p = head1 -> next; |
64 | while (p != NULL) |
65 | { |
66 | if (p -> next != NULL) |
67 | { |
68 | printf ( "%d " , p -> date); |
69 | } |
70 | else |
71 | { |
72 | printf ( "%d\n" , p -> date); |
73 | } |
74 | p = p -> next; |
75 | } |
76 | return 0; |
77 | } |