Problem Description
输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。
Input
第一行输入整数N;;
第二行依次输入N个整数。
第二行依次输入N个整数。
Output
第一行分别输出偶数链表与奇数链表的元素个数;
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。
Example Input
10 1 3 22 8 15 999 9 44 6 1001
Example Output
4 6 22 8 44 6 1 3 15 999 9 1001
01 | #include<stdio.h> |
02 | #include<stdlib.h> |
03 | struct node |
04 | { |
05 | int date; |
06 | struct node *next; |
07 | } *head1, *head2, *p, *q, *tail1, *tail2, *t; |
08 | int main() |
09 | { |
10 | int n, i, c; |
11 | c = 0; |
12 | scanf ( "%d" , &n); |
13 | head1 = ( struct node *) malloc ( sizeof ( struct node)); |
14 | head1 -> next = NULL; |
15 | tail1 = head1; |
16 | for (i = 0; i < n; i++) |
17 | { |
18 | p = ( struct node *) malloc ( sizeof ( struct node)); |
19 | scanf ( "%d" , &p -> date); |
20 | p -> next = NULL; |
21 | tail1 -> next = p; |
22 | tail1 = p; |
23 | } |
24 | p = head1 -> next; |
25 | head1 -> next = NULL; |
26 | tail1 = head1; |
27 | head2 = ( struct node *) malloc ( sizeof ( struct node)); |
28 | head2 -> next = NULL; |
29 | tail2 = head2; |
30 | q = p -> next; |
31 | while (p != NULL) |
32 | { |
33 | if (p -> date % 2 == 0) |
34 | { |
35 | p -> next = tail1 -> next; |
36 | tail1 -> next = p; |
37 | tail1 = p; |
38 | } |
39 | else |
40 | { |
41 | tail2 -> next = p; |
42 | tail2 = p; |
43 | p = p -> next; |
44 | c++; |
45 | } |
46 | p = q; |
47 | if (q != NULL) |
48 | { |
49 | q = q -> next; |
50 | } |
51 | } |
52 | printf ( "%d %d\n" , n - c, c); |
53 | p = head1 -> next; |
54 | q = head2 -> next; |
55 | while (p != NULL) |
56 | { |
57 | if (p -> next != NULL) |
58 | { |
59 | printf ( "%d " , p->date); |
60 | } |
61 | else |
62 | { |
63 | printf ( "%d\n" , p->date); |
64 | } |
65 | p = p -> next; |
66 | } |
67 | while (q != NULL) |
68 | { |
69 | if (q -> next != NULL) |
70 | { |
71 | printf ( "%d " , q->date); |
72 | } |
73 | else |
74 | { |
75 | printf ( "%d\n" , q->date); |
76 | } |
77 | q = q -> next; |
78 | } |
79 | return 0; |
80 | } |