输入: total:参与的总数量; selector:出局的号码。
输出:逐个出局的详细列表,输出最后的winner。
void joserf(int total, int selector)
{
ListNode *head, *p1, *p2;
int sel = selector;
if(total <= 0) return;
if(selector == 1)
{
printf("winner %d\n", total);
return;
}
head = (ListNode*)malloc(sizeof(ListNode));
head->next = head;
head->val = 1;
p1 = head;
for(int i = 1; i < total; i++)
{
p2 = (ListNode*)malloc(sizeof(ListNode));
p2->val = i+1;
p1->next = p2;
p1 = p2;
}
p1->next = head;
p1 = head;
while(p1 != p1->next)
{
p2 = p1;
while(sel)
{
if(--sel > 1) p1 = p1->next;
p2 = p2->next;
}
sel = selector;
printf("%d ", p1->next->val);
free(p1->next);
p1->next = p2;
p1 = p1->next;
}
printf("\nwinner %d\n", p1->val);
}