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

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

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

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

输入

第一行输入整数N;;
第二行依次输入N个整数。

输出

第一行分别输出偶数链表与奇数链表的元素个数; 
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。

示例输入

10
1 3 22 8 15 999 9 44 6 1001

示例输出

4 6
22 8 44 6 
1 3 15 999 9 1001

提示

不得使用数组!
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    int data;
    struct node *next;
}NODE;
int main()
{
    NODE *head, *tail, *q, *tail1, *head1, *head2, *tail2, *p;
    head = (NODE *)malloc(sizeof(NODE));
    head->next = NULL;
    tail = head;
    int n;
    scanf("%d", &n);
    int i;
    for(i = 0;i < n;i++){
        q = (NODE *)malloc(sizeof(NODE));
        q->next = NULL;
        scanf("%d", &q->data);
        tail->next = q;
        tail = q;
    }
    head1 = (NODE *)malloc(sizeof(NODE));
    head1->next = NULL;
    tail1 = head1;
    head2 = (NODE *)malloc(sizeof(NODE));
    head2->next = NULL;
    tail2 = head2;
    p = head->next;
    q = p->next;
    while(p != NULL){
        if(p->data%2 == 0){
            p->next = NULL;
            tail1->next = p;
            tail1 = p;
        }else {
            p->next = NULL;
            tail2->next = p;
            tail2 = p;
        }
        p = q;
        if(q != NULL){
            q = q->next;
        }
    }
    int cnt1 = 0;
    p = head1->next;
    while(p != NULL){
        cnt1++;
        p = p->next;
    }
    p = head2->next;
    int cnt2 = 0;
    while(p != NULL){
        cnt2++;
        p = p->next;
    }
    printf("%d %d\n", cnt1, cnt2);
    p = head1->next;
    while(p != NULL){
        if(p->next != NULL){
            printf("%d ", p->data);
        }else {
            printf("%d\n", p->data);
        }
        p = p->next;
    }
    p = head2->next;
    while(p != NULL){
        if(p->next != NULL){
            printf("%d ", p->data);
        }else {
            printf("%d\n", p->data);
        }
        p = p->next;
    }

    return 0;
}
 


你可能感兴趣的:(数据结构实验之链表五:单链表的拆分)