408数据结构综合题

数据结构综合应用题③
问题:设计一个算法,将头节点为A的单链表(其数据域为整数)分解成两个单链表A和B,使得A链表只含有链表中data域为奇数的结点,而B链表只含有原链表中data域为偶数的结点,且保持原来的相对顺序。
解题思路:用指针p从头到尾扫描A链表,当发现结点data域为偶数的结点则取下,插入链表B中。因为题目要求保持原来数据元素的相对顺序,所以要用尾插法来建立B链表
答案:

void splits2(LNode *A,LNode *&B)
{
	LNode *p,*q,*r;
	B=(LNode*)malloc(sizeof(LNode));//申请链表B的头结点
	B->next=NULL;//每申请一个新节点,将其指针域next设置为NULL
				//这样可以避免很多因链表的终端节点忘记置NULL而产生的错误
	r=B;
	p=A;
	while(p->next!=NULL)//p始终指向当前被判断结点的前驱结点,这和删除结点类似,因为取下一个结点就是删除结点,只是不释放这个结点的内存空间而已
	{
		if(p->next->data%2==0)//判断结点的data域是否为偶数,是偶数则从链表中取下
		{
			q=p->next;//q指向要从链表中取下的结点
			p->next=q->next;//从链表中取下这个结点
			q->next=NULL;
			r->next=q;
			r=q;
		}
		else p=p->next;//p后移一个位置,即开始检查下一个结点
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值