第一步:建立两个新链表
第二步:遍历原链表,将遍历的数 判断是奇数还是偶数
第三步:若是奇数,用尾插法 插入到链表L1。 若是偶数,用尾插法 插入到链表L2
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct NUM {//定义一个结构体
int num;
struct NUM* pNext;
} num, * pnum;
//该子函数 是尾插法
void insert(pnum* phead, pnum* ptail, int Input) {
pnum pnew = (pnum)calloc(sizeof(num), 1);
memset(pnew, 0, sizeof(num));
pnew->num = Input;
if (NULL == *phead) { //判断链表是否为空
//如果链表为空
*phead = pnew;
*ptail = pnew;
}
else {
(*ptail)->pNext = pnew;
*ptail = pnew;
}
}
//打印链表
void printList(pnum phead) {
pnum pcur = phead;
while (pcur) {
printf("%d ",pcur->num);
pcur=pcur->pNext;
}
printf("\n");
}
//链表的拆分
void Listdivi(pnum phead, pnum* phead1, pnum* ptail1, pnum* phead2,pnum* ptail2) {
int n = 1;
while (phead !=NULL) {
if (n % 2 !=0) {
insert(phead1,ptail1,phead->num);
}
else {
insert(phead2,ptail2,phead->num);
}
n++;
phead = phead->pNext;
}
}
int main() {
pnum phead = NULL;//原链表
pnum ptail = NULL;
pnum phead1 = NULL;//链表1
pnum ptail1 = NULL;
pnum phead2 = NULL;//链表2
pnum ptail2 = NULL;
int InPut;//定义要输入的数
while (scanf_s("%d", &InPut) != EOF) {//读取要输入的数字
insert(&phead, &ptail, InPut);//调用子函数 在子函数中具体实现功能
}
Listdivi(phead, &phead1,&ptail1,&phead2,&ptail2);
printf("原链表是:");
printList(phead);
printf("链表1是:");
printList(phead1);
printf("链表2是:");
printList(phead2);
}
运行结果: