#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int DataType;
struct Node
{
DataType data;
struct Node *next;
bool flag;
};
typedef struct Node *PNode;
typedef struct Node *ClinkList;
void printLinkList(ClinkList llist,int n)
{
PNode p;
if (llist == NULL)
printf("\n The Linklist is NULL !\n");
p = llist->next;
int count=0;
while (count<n)
{
printf("%d ", p->data);
p = p->next;
count++;
}
printf("\n");
}
ClinkList JosephusCard(int n,int s,int k[])
{
Node *current,*prev,*head;
head=(Node*)malloc(sizeof(Node));
prev=head;
for(int i=1;i<=n;i++)
{
current=(Node*)malloc(sizeof(Node));
current->data=-1;
current->flag=false;
prev->next=current;
prev=current;
}
prev->next=head->next;
current=head->next;
for(int i=1;i<s;i++)
{
prev=prev->next;
current=current->next;
}
current->data=s;
current->flag=true;
int r=0;
while(r<n-1)
{
r++;
for (int i = 1; i <= k[r] + 1; i++)
{
prev = prev->next;
current = current->next;
if (current->flag)
{
i--;
continue;
}
}
current->data = k[r];
current->flag = true;
}
return head;
}
int main()
{
const int n=15;
int k[n];
for(int i=0;i<n;i++)
k[i]=i+1;
PNode head=JosephusCard(n,1,k);
printLinkList(head,n);
system("pause");
}