数据结构实验之链表五:单链表的拆分

Description

输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。

Input

第一行输入整数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 }

 

posted @ 2020-06-07 12:55  爱写程序的机械师  阅读(156)  评论(0)    收藏  举报