将一个链表拆成A,B两个链表,A中只含有data域为奇数的结点,B中只含有data域为偶数的结点
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L)
{
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL) return false;
L->next=NULL; return true;
}
LinkList list_TailInsert(LinkList &L)
{
InitList(L);
LNode *s,*r=L;
int x;
char a[100];
do
{
scanf("%s",&a);
if(a[0]=='@') break;
x=atoi(a);
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
}while(1);
r->next=NULL;
return L;
}
void split(LinkList &L,LinkList &A,LinkList &B)
{
LNode *p=L->next,*a=A,*b=B;
while(p)
{
if(p->data%2)
{
a->next=p;
a=p;
}
else
{
b->next=p;
b=p;
}
p=p->next;
}
a->next=NULL;
b->next=NULL;
}
int main()
{
LinkList L,A,B;
InitList(A);
InitList(B);
list_TailInsert(L);
split(L,A,B);
printf("链表A中元素的值:");
LNode *a;
a=A->next;
while(a)
{
printf("%d\t",a->data);
a=a->next;
}
printf("\n");
printf("链表B中元素的值:");
LNode *b;
b=B->next;
while(b)
{
printf("%d\t",b->data);
b=b->next;
}
}