#include <stdio.h> #include <stdlib.h> typedef struct Node { int num; struct Node* next; } Node; Node* createCircle(int n) { Node* head = (Node*)malloc(sizeof(Node)); head->num = 1; Node* prev = head; for (int i = 2; i <= n; i++) { Node* node = (Node*)malloc(sizeof(Node)); node->num = i; prev->next = node; prev = node; } prev->next = head; return head; } int findLastPerson(Node* head) { Node* current = head; Node* prev = NULL; while (current->next != current) { for (int i = 1; i < 3; i++) { prev = current; current = current->next; } prev->next = current->next; free(current); current = prev->next; } int lastPerson = current->num; free(current); return lastPerson; }
int main() { Node* circle = createCircle(13); int lastPerson = findLastPerson(circle); printf("The last person left is number %d.\n", lastPerson); return 0; }