C语言链表实现约瑟夫环问题(15人,数3出局)
#include <stdio.h>\n#include <stdlib.h>\n\ntypedef struct Node {\n int data;\n struct Node* next;\n} Node;\n\nNode* createNode(int data) {\n Node* newNode = (Node*)malloc(sizeof(Node));\n newNode->data = data;\n newNode->next = NULL;\n return newNode;\n}\n\nNode* createJosephusCircle(int n) {\n Node* head = createNode(1);\n Node* prev = head;\n \n for (int i = 2; i <= n; i++) {\n Node* newNode = createNode(i);\n prev->next = newNode;\n prev = newNode;\n }\n \n prev->next = head; // 将最后一个节点的下一个节点指向头节点,形成环\n \n return head;\n}\n\nvoid josephus(int n, int k) {\n Node* head = createJosephusCircle(n);\n Node* curr = head;\n Node* prev = NULL;\n \n while (n > 1) {\n for (int i = 1; i < k; i++) {\n prev = curr;\n curr = curr->next;\n }\n \n prev->next = curr->next;\n Node* temp = curr;\n curr = curr->next;\n free(temp);\n n--;\n }\n \n printf("The last person standing is: %d\n", curr->data);\n free(curr);\n}\n\nint main() {\n int n = 15; // 15个人\n int k = 3; // 数到3退出\n josephus(n, k);\n return 0;\n}
原文地址: https://www.cveoy.top/t/topic/pRiT 著作权归作者所有。请勿转载和采集!