这里传入链表的尾结点
void odd_even_split(ClinkList&a) {
PNode head = a->next, p = a->next->next, q = a->next->next;
ClinkList pre = head;
while (p!= head) {
if (p->data & 1) {
if (p == head->next) {
pre = pre->next;
p = p->next;
q = q->next;
continue;
}
if (q != a) q = q->next; //先走一步
pre->next = p->next;
p->next = head->next;
head->next = p; //将数插进开头
if (p == a) {
a = pre; //pre为新的尾结点,赋值更新尾结点
break;
}
p = q;
q = q->next;
}
else{
pre = pre->next;
p = p->next;
q = p; //保持p、q指向相同结点,为奇数的操作准备
}
}
}