题目: 设计一个算法,将一个头结点为A的单链表(其数据域为整数)分解成两个单链表A和B,使得A链表只含有原来链表中data域的奇数的结点,而B链表只含有原链表中data域为偶数的结点,且保持原来的相对顺序。
算法思想:遍历链表,找到偶数结点,使偶数结点先从原本的链表中脱链,之后在新的链表中再进行连接。
核心代码
void Spilt(LNode *A, LNode *B) {
LNode *p = A;
LNode *q; //偶数结点
B = (LNode *) malloc(sizeof(LNode));
LNode *r = B; //偶数结点
B->next = NULL;
while (p->next) {
if (p->next->data % 2 == 0) {
q = p->next; //把偶数结点给q
p->next = q->next; //脱链 把偶数结点q从原本的链表中
r->next = q;
r = q;
} else {
p = p->next;
}//if
}//while
}