问题描述:将一个链表(带头指针)划分为两个链表,一个链表为原来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;
}