题目描述:
将一个带头结点的单链表A分解成两个带头结点的单链表A和B,使得A表中含有原表中序号为奇数的元素,而B表中含有原表中偶数的元素,且保持其相对的顺序不变。
算法思路:
设置一个访问变量(初值为0),每访问一个结点序号自动加一,然后根据序号的奇偶性将结点插入到A表或者B表中。重复以上的操作直到表尾。为了保持原来的结点顺序,采用尾插法建立单链表。
代码如下:
LinkList main(LinkList &A){
i=0;
B=(LinkList)malloc(sizeof(LNode));
B->next=NULL;
LNode *ra=A,*rb=B; //指向表A和B的尾结点
p=A->next; //待分解的结点
A->next=NULL; //置空新的A表
while(p!=NULL){
i++;
if(i%2==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;
}