C语言——链表拆分,奇数组成一个链表,偶数组成另外一个链表

第一步:建立两个新链表

第二步:遍历原链表,将遍历的数 判断是奇数还是偶数

第三步:若是奇数,用尾插法 插入到链表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);
	
}

	

       运行结果:

 

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值