将一个链表中的结点按照奇偶分成两个链表

#include<stdio.h>
#include<stdlib.h>
#define N 21;

typedef struct Point
{
    int data;
    struct Point *next;
}Node,*pNode;
int main()
{
    void create(pNode);
    void separate(pNode,pNode);
    void print(pNode);
    pNode A=NULL,B=NULL;
    A=(pNode)malloc(sizeof(Node));
    B=(pNode)malloc(sizeof(Node));
    printf("Enter numbers(input 0 to end):\n");
    create(A);
    separate(A,B);
    print(A);
    print(B);
    return 0;
}

void create(pNode head)
{
    int n=0;
    pNode p,q;
    p=q=(pNode)malloc(sizeof(Node));
    scanf("%d",&p->data);
    while(p->data!=0)
    {
        ++n;
        if(n==1)
            head->next=p;
        else
            q->next=p;
        q=p;
        p=(pNode)malloc(sizeof(Node));
        scanf("%d",&p->data);
    }
    q->next=NULL;
}

void separate(pNode A,pNode B)
{
    pNode pa1,pa2,pb;
    pa1=A->next;
    pa2=A;
    pb=B;
    while(pa1!=NULL)
    {
        while(pa1->data%2!=0&&pa1->next!=NULL)/*当A当前结点是奇数而且后面还有结点时执行*/
        {
            pa2=pa1;
            pa1=pa1->next;
        }
        if(pa1->data%2==0)/*找到偶数了*/
        {
            pa2->next=pa1->next;
            pb->next=pa1;
            pb=pb->next;
            pa1=pa2->next;
        }
        else/*当A最后一个结点是奇数时*/
            pa1=pa1->next;
    }
    pb->next=NULL;
}

void print(pNode head)
{
    pNode p=head->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    putchar(10);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值