题目要求:将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A原序号奇,B原序号偶。
算法思想:初始化两个单链表,然后用指针扫描原链表,判断是奇数还是偶数,奇数就加入A链表,偶数加入B链表即可。
LinkList resolve(LinkList &A) {
LinkList B; int count = 0;
B = (LinkList)malloc(sizeof(LNOde)); //创建B表表头
B->next = NULL; //初始化B表
LNode* ra = A, *rb = B; //ra和rb分别指向A和B的尾指针
LNOde* p = A->next, * s;//p为工作指针
A->next = NULL;//将A初始化
while (p) {
count++;
//s = p->next; //s为p的后继
if ((count & 1) == 0) { // 序号偶数则存在B中
rb->next = p;
rb = p;
}
else { // 序号奇数则存在A中
ra->next = p;
ra = p;
}
p = p->next;
}
ra->next = NULL; rb->next = NULL;
return B;
}