求:将一个头结点为A的单链表分解成两个单链表A和B,A链表只含原链表中值域为奇数的结点,
B链表只含有值域为偶数的结点,且保持原来的相对顺序
算法思想:用p从头至尾扫描,扫描到偶数结点则在A中删摘下,尾插到B中 (摘下结点不需释放)
void split(LNode *A,LNode *&B)
{
LNode *p,*q,*r;
B = (LNode *)malloc(sizeof(LNode));
B->next =NULL;
p = A;//p指向A中当前判断结点的前驱结点
r = B;//r指向B中的尾结点
while(p->next != NULL)
{
if(p->next->data % 2 == 0)//当前判断结点为偶数,则尾插到B中
{
q = p-next;//q用来保存当前要删除的结点
q->next = q->next;//从A中摘下 (摘下结点不需释放)
q->next = NULL;
r->next = q;//尾插到B中
r = q;//尾指针移动
}
else
p = p->next;//p后移
}
}