172 字
1 分钟
循环单链表和循环列表解决约瑟夫问题
循环单链表
// 创建循环链表SNode* createCLink(int value){ SNode* cList = createSNode(value); cList->next = cList;}
// 循环列表输出void cLink_print(SNode* clink, char* pattern){ SNode* p = clink; do { printf(pattern, p->value); p = p->next; }while(clink != p->next);}循环列表解决约瑟夫问题
// 约瑟夫问题// n:规定的数SNode* JosephusProblem(SNode* cLink, int n){ int i = 0; /* 因为只有头指针所以先加一 当n为1或2时会有问题,其他情况没问题 */ i = (i+1)%n; cLink = cLink->next; // 跟上面同步往后移动 while(cLink->next != cLink) { i = (i+1)%n; if(i == (2*n -1 )% n) { // 删除的同时数字要加一 deleteSNode(cLink, cLink->next); i = (i+1)%n; } cLink = cLink->next; } return cLink;}原文链接:CSDN
循环单链表和循环列表解决约瑟夫问题
https://blog.homura.work/posts/csdn/109319640/