首页 > 其他 > 详细

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

时间:2016-01-24 09:11:53      阅读:303      评论:0      收藏:0      [点我收藏+]
#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);
}

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

原文:http://www.cnblogs.com/bhlsheji/p/5154531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!