## 将一个链表A拆分成两个,序号是奇数留在链表A中,序号是偶数保存在链表B中
```
#include
#include
//将一个链表拆分成两个,奇数留在链表A中,偶数保存在链表B中
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList List_HeadInsert(LinkList &L);
LinkList DisCreat(LinkList &A);
void printLinkList(LinkList &L);
int main(){
LinkList A,B;
// LNode *p,*q;
A = List_HeadInsert(A);
printf("拆分前的链表A:");
printLinkList(A);
printf("\n");
B = DisCreat(A);
printf("拆分后的链表A:");
printLinkList(A);
printf("\n");
printf("拆分后的链表B:");
printLinkList(B);
}
LinkList DisCreat(LinkList &A){
//将表A中结点按序号的奇偶性分解到表A和表B中
LinkList B;
int i=0; //记录A中的结点序号
B=(LinkList)malloc(sizeof(LNode)) ; //创建B表表头
B->next=NULL; //B表的初始化
LNode *ra=A,*rb=B,*p;
p=A->next; //p为链表工作指针,指向带分解点
A->next=NULL;
while(p){
i++;
if(i%2==0) {
//序号为偶数
rb->next=p;
rb=p;
}else{
//序号为奇数
ra->next=p;
ra=p;
}
p=p->next;
}
ra->next=NULL;
rb->next=NULL;
return B;
}
LinkList List_HeadInsert(LinkList &L){
//头插法创建单链表
LNode *s;
int x;
L=(LinkList)malloc(sizeof(LNode)); //创建头结点
L->next=NULL;
scanf("%d",&x);
while(x!=-1){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
void printLinkList(LinkList &L) {
LNode *p;
p=L->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
}
```
![](https://img.kancloud.cn/d4/c3/d4c32ff36ea890a7390cab6cb6a30273_771x267.png)