【数据结构】单链表划分奇偶

问题描述:将一个链表(带头指针)划分为两个链表,一个链表为原来data区域为奇数的,一个为偶数的。

思路:在原链表进行操作,依次扫描判断,如果为偶数,就把它移动到另一个链表。

注意的点:当判断为偶数时,移动后,List=List->next,这个操作,在表尾是偶数的情况下,会直接使List变成NULL,和循环条件在一起就会爆炸,因为系统不允许NULL->next这个操作。所以要注意边界的处理。

void divide_Odd_Even(LinkList List, LinkList *ListEven)
{
	init(ListEven);//初始化B,使其成为带有头结点的空指针,用于将来存放偶数
	LinkList ListB = *ListEven;//偶数链表的临时指针
	while (List->next != NULL)
	{
		if (List->next->data % 2 == 0)//如果为偶数
		{
			LinkList temp = List->next;//记录下这个偶数的节点的地址
			List->next = temp->next;//删除操作
			List = List->next;//前进一格
			ListB->next = temp;//将偶数节点接入ListB
			ListB = temp;//临时指针移动到表尾,注意,此时表尾的next并不是指向NULL
		}
		else//如果是奇数
		{
			List = List->next;//前进一格
		}
		if (List == NULL)//如果最后一个链表是偶数,则移动完链表后,因为要再前进一格,所以List为NULL,如果这个时候不结束循环,循环条件会爆炸
		{
			return;
		}
	}
	ListB->next = NULL;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值