数据结构实验之链表四:有序链表的归并
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
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 data; |
06 |
struct node
*next; |
07 |
}; |
08 |
struct nd |
09 |
{ |
10 |
int data; |
11 |
struct nd
*next; |
12 |
}; |
13 |
int main() |
14 |
{ |
15 |
int i,
n, m; |
16 |
struct node
*head, *p, *q, *tail; |
17 |
struct nd
*head1, *p1, *r; |
18 |
head
= ( struct node
*) malloc ( sizeof ( struct node)); |
19 |
head1
= ( struct nd
*) malloc ( sizeof ( struct nd)); |
20 |
head->next
= NULL; |
21 |
head1->next
= NULL; |
22 |
scanf ( "%d%d" ,
&n, &m); |
23 |
q
= head; |
24 |
for (i
= 0;i<n;i++) |
25 |
{ |
26 |
p
= ( struct node
*) malloc ( sizeof ( struct node)); |
27 |
scanf ( "%d" ,
&p->data); |
28 |
p->next
= q->next; |
29 |
q->next
= p; |
30 |
q
= p; |
31 |
} |
32 |
r
= head1; |
33 |
for (i
= 0;i<m;i++) |
34 |
{ |
35 |
p1
= ( struct nd
*) malloc ( sizeof ( struct nd)); |
36 |
scanf ( "%d" ,
&p1->data); |
37 |
p1->next
= r->next; |
38 |
r->next
= p1; |
39 |
r
= p1; |
40 |
} |
41 |
q
= head->next;r = head1->next; |
42 |
head->next
= NULL; |
43 |
tail
= head; |
44 |
free (head1); |
45 |
while (r&&q) |
46 |
{ |
47 |
if (q->data
< r->data) |
48 |
{ |
49 |
tail->next
= q; |
50 |
tail
= q; |
51 |
q
= q->next; |
52 |
tail->next
= NULL; |
53 |
} |
54 |
55 |
else if (q->data
>= r->data) |
56 |
{ |
57 |
tail->next
= r; |
58 |
tail
= r; |
59 |
r
= r->next; |
60 |
tail->next
= NULL; |
61 |
} |
62 |
} |
63 |
if (q) |
64 |
{ |
65 |
tail->next
= q; |
66 |
} |
67 |
else |
68 |
tail->next
= r; |
69 |
tail
= head->next; |
70 |
while (tail->next!=NULL) |
71 |
{ |
72 |
printf ( "%d
" ,
tail->data); |
73 |
tail
= tail->next; |
74 |
} |
75 |
printf ( "%d\n" ,
tail->data); |
76 |
return 0; |
77 |
} |