node* JosephCircle_OP(node*& phead, size_t del) //约瑟夫环 优化写法  


{

assert(phead);

node* cur = phead, *prev = phead;

if(!del)   //对参数判断

{

printf("error parameter!");

}

while(cur->next != cur)

{

for(int i=1; i<del; i++)    //先找到删除节点的上一个节点//因为自己占一个节点,所以再减1

{

prev = cur;

cur = cur->next;

}

if(del!=1)

{

prev->next = cur->next;

free(cur);

}

else//删除不为1的情况

{

node* tmp = cur;

cur = cur->next;

free(tmp);

}

}

return cur;

}