typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
void segregate(LinkList &L){
LinkList r, p, oldEnd; //链表最后一个结点, 链表结点的替代结点
int flag=0;
r = L->next;
p = L;
// r定位到链表的最后一个结点
while(r->next){
r = r->next;
}
oldEnd = r;
while(p->next!=oldEnd || (p->next==oldEnd&&p->next->data&1==0)){
if(p->next->data%2==0){
if(p->next==oldEnd)
flag = 1;
//把偶数结点接到表尾
r->next = p->next;
r = r->next;
//跳过偶数结点
p->next = p->next->next;
//单独处理最后一个偶数结点的情况
if(flag){
break;
}
}else{
p = p->next;
}
}
r->next = NULL;
}
程序小白,如果代码有任何问题,欢迎指出。