约瑟夫环-链表

复制代码
#include <stdlib.h> //非malloc
#include <stdio.h>

typedef struct LNode{
    int data;
    LNode* next;
    
}LNode,*Linklist;

void josephus(int n,int k,int m)
{
    Linklist cur,head,prior,temp;
    head=(Linklist)malloc(sizeof(LNode));
    head->data=1;
    head->next=head;
    
    cur=head;//当前节点设为头结点
    
    for (int i=2; i<=n; i++) {
        temp=(Linklist)malloc(sizeof(LNode));
        temp->data=i;
        temp->next=cur->next;
        cur->next=temp;
        cur=temp;
    }
    
    cur=head;//当前节点设为头结点
    
    while(--k)//注意此处是先--
    {
        prior=cur;
        cur=cur->next;
    }
    while (n--) {
        for (int i=0; i<m-1; i++) {
            prior=cur;
            cur=cur->next;
        }
        printf("%d\n",cur->data);
        prior->next=cur->next;
        free(cur);
        cur=prior->next;
    }
    
    
}
复制代码

 

posted @   helo_blog  阅读(199)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示