数据结构实验之链表五:单链表的拆分
Description
输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。
Input
第一行输入整数N;;
第二行依次输入N个整数。
第二行依次输入N个整数。
Output
第一行分别输出偶数链表与奇数链表的元素个数;
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。
Sample
Input
10 1 3 22 8 15 999 9 44 6 1001
Output
4 6 22 8 44 6 1 3 15 999 9 1001
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 typedef struct node 5 { 6 int data; 7 struct node *next; 8 } set; 9 10 set *creat(set *tail) 11 { 12 set *p = (set*)malloc(sizeof(set)); 13 p->next = NULL; 14 tail->next = p; 15 return p; 16 } 17 void Printf(set *head) 18 { 19 set *p = head->next; 20 while(p) 21 { 22 if(p->next == NULL) 23 printf("%d\n",p->data); 24 else 25 printf("%d ",p->data); 26 p = p->next; 27 } 28 } 29 int main() 30 { 31 int n; 32 scanf("%d",&n); 33 int x = n; 34 set *head = (set*)malloc( sizeof(set)); 35 head->next = NULL; 36 set *tail = head; 37 int i; 38 for(i=0;i<n;i++) 39 { 40 set *p = creat(tail); 41 scanf("%d",&p->data); 42 tail = p; 43 } 44 set *head1 = (set *)malloc(sizeof(set)); 45 head1->next = NULL; 46 set *p,*q,*t; 47 t = head1; 48 p = head; 49 q = head->next; 50 while(q) 51 { 52 if(q->data%2==0) 53 { 54 p->next = q->next; 55 t->next = q; 56 q->next = NULL; 57 t = t->next; 58 q = p->next; 59 n--; 60 } 61 else 62 { 63 p = p->next; 64 q = q->next; 65 } 66 } 67 printf("%d %d\n",x-n,n); 68 Printf(head1); 69 Printf(head); 70 return 0; 71 }

浙公网安备 33010602011771号