设线性表
转换成
void change_list(NODE* h){
NODE *p,*q,*r,*s;
p=q=h;
while(q->next!=NULL){//寻找中间结点
p=p->next;//p走一步
q=q->next;
if(q->next!=NULL)q=q->next;//q走两步
}
q=p->next;//p为中间节点,q为后半段链表的首结点
p->next=NULL;
while(q!=NULL){//将后半段链表逆置
r=q->next;
q->next=p->next;
p->next=q;
q=r;
}
s=h->next;//s指向前半段的第一个数据结点,即插入点
q=p->next;//q指向后半段的第一个数据结点
p->next=NULL;
while(q!=NULL){//将链表后半段的结点插入到指定位置
r=q->next;//r指向后半段的下一个结点
q->next=s->next;//将q所指结点插入到s所指结点之后
s->next=q;
s=q->next;//s指向前半段的下一个插入点
q=r;
}
}