循环链表;
#ifndef _LINKLIST_H__
#define _LINKLIST_H__
#include <stdio.h>
typedef int data_t;
typedef struct Node{
data_t data;
struct Node *next;
}link_t;
link_t *link_create();
int is_empty(link_t *head);
int get_length(link_t *head);
void link_show(link_t *head);
int link_insert(link_t *head, data_t data, int pos);
int link_delete_pos(link_t *head, int pos);
int link_delete_data(link_t *head, data_t data);
link_t *link_search_pos(link_t *head, int pos);
link_t *link_search_data(link_t *head, data_t data);
link_t *link_reverse(link_t *head);
link_t *link_sort(link_t *head);
void joseph_cycle(int n, int m);
#endif
____________________________________________________________________
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "linklist.h"
void joseph_cycle(int n, int m)
{
if(n <= 0)
return ;
link_t *o, *p;
link_t *head = NULL;
while(n--)
{
p= (link_t *)malloc(sizeof(link_t));
p->data = i;
if(head == NULL)
head = p;
else
o->next = p;
o = p;
}
o->next = head;
while(p->next!= p)//只能活一个!!
{
for(i = 0; i < m - 1; i++)
p = p->next;
o = p->next;
p->next = o->next;
}
printf("kil:%d\n", o->data);
free(o);
printf("alive:%d, %d\n", p->data);
}
int main()
{
void joseph_cycle(7, 2)
return 0;
}