Problem Description 輸入N個整數順序建立一個單鏈表,將該單鏈表拆分成兩個子鏈表,第一個子鏈表存放了所有的偶數,第二個子鏈表存放了所有的奇數。兩個子鏈表中數據的相對次序與原鏈表一致。 Input 第一行輸入整數N;;第二行依次輸入N個整數。 Output 第一行分別輸出偶數鏈表與奇 ...
Problem Description
輸入N個整數順序建立一個單鏈表,將該單鏈表拆分成兩個子鏈表,第一個子鏈表存放了所有的偶數,第二個子鏈表存放了所有的奇數。兩個子鏈表中數據的相對次序與原鏈表一致。Input
第一行輸入整數N;;第二行依次輸入N個整數。
Output
第一行分別輸出偶數鏈表與奇數鏈表的元素個數;第二行依次輸出偶數子鏈表的所有數據;
第三行依次輸出奇數子鏈表的所有數據。
Sample Input
10 1 3 22 8 15 999 9 44 6 1001
Sample Output
4 6 22 8 44 6 1 3 15 999 9 1001
Hint
不得使用數組!Source
1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <algorithm> 5 6 using namespace std; 7 8 struct node 9 { 10 int data; 11 struct node *next; 12 }; 13 14 int cnt1,cnt2; 15 16 //申請空間 17 struct node *arr_mal(struct node *p) 18 { 19 p = (struct node *)malloc(sizeof(struct node)); 20 return p; 21 } 22 23 //創建鏈表 24 void arr_create(struct node *head,int n) 25 { 26 struct node *p=NULL,*tail=NULL; 27 tail = head; 28 while(n--) 29 { 30 p = arr_mal(p); 31 scanf("%d",&p ->data); 32 tail ->next = p; 33 tail = tail ->next; 34 } 35 } 36 37 //輸出鏈表 38 void arr_prin(struct node *head) 39 { 40 struct node *p=NULL; 41 p = head ->next; 42 if(p != NULL) 43 { 44 printf("%d",p ->data); 45 p = p ->next; 46 } 47 while(p != NULL) 48 { 49 printf(" %d",p ->data); 50 p = p ->next; 51 } 52 printf("\n"); 53 } 54 55 //拆分 56 void arr_split(struct node *head1,struct node *head2) 57 { 58 59 struct node *p1=NULL,*p2=NULL,*tail=NULL; 60 p1 = head1; 61 p2 = head2; 62 while(p1 ->next != NULL) 63 { 64 if(p1 ->next->data%2) 65 { 66 p1 = p1 ->next; 67 cnt1++; 68 } 69 else 70 { 71 tail = p1 ->next; 72 p1 ->next = tail ->next; 73 tail ->next = NULL; 74 p2 ->next = tail; 75 p2 = p2 ->next; 76 cnt2++; 77 } 78 } 79 } 80 81 int main() 82 { 83 int n; 84 cnt1=cnt2=0; 85 struct node *head1=NULL,*head2=NULL; 86 head1 = arr_mal(head1); 87 head2 = arr_mal(head2); 88 scanf("%d",&n); 89 arr_create(head1,n); 90 arr_split(head1,head2); 91 printf("%d %d\n",cnt2,cnt1); 92 arr_prin(head2); 93 arr_prin(head1); 94 return 0; 95 }