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

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

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

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

/*************************************
先尾插法建一个表head,然后建head1 和 head2
两个空表,再然后从左到右遍历head偶数存于head1
奇数存于head2
**************************************/
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    int data ;
    struct node *next ;
}NODE ;

NODE *head1 , *head2 ;

NODE *creat(int n)
{
    int i;
    NODE *head , *p ,*q ;
    head = (NODE*)malloc(sizeof(NODE)) ;
    head -> next  = NULL  ;
    q = head ;
    for(i=0;i<n;i++)
    {
        p = (NODE*)malloc(sizeof(NODE)) ;
        p->next = NULL ;
        scanf("%d",&p->data) ;
        q -> next = p;
        q =p ;
    }
    return head ;
}

void bl(NODE*head)
{
    NODE * p ,*t1,*t2 ;
    p = head -> next ;
    int i , j ;
    i =0  ;  j = 0 ;
    head1 = (NODE*)malloc(sizeof(NODE)) ;
    t1 = head1 ;
    head2 = (NODE*)malloc(sizeof(NODE));
    t2 = head2 ;
    while(p)
    {
        if(p->data%2==0)
        {
            t1->next =  p ;
            t1=t1->next ;
            i++ ;
        }
        else
        {
            t2->next = p ;
            t2 = t2->next ;
            j++ ;
        }
        p = p-> next ;
    }
    t2->next = NULL ;
    t1 ->next = NULL ;
    printf("%d %d\n",i,j) ;
}

void show(NODE *head)
{
    NODE *p ;
    p = head -> next ;
    while(p)
    {
        printf("%d",p->data) ;
        if(p->next == NULL )
            printf("\n") ;
        else
            printf(" ") ;
        p = p->next ;
    }
}

int main()
{
    int n ;
    NODE *head ;
    scanf("%d",&n) ;
    head = creat(n) ;
    bl(head) ;
    show(head1) ;
    show(head2) ;
    return 0 ;
}


/***************************************************
Result: Accepted
Take time: 0ms
Take Memory: 152KB
Submit time: 2019-03-03 19:37:41
****************************************************/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值