intmain(){int N =5;
Node* head =Children(N);//初始化
Node* last = head->next;while(last->next!=last){//循环链表判空
last = last->next->next;deleteNode(last);}printf("%d", last->num);//输出最后一个小孩的序号return0;}
完整程序
#include<stdio.h>#include<malloc.h>struct Node//结点{int num;
Node *next;};
Node*Children(int n){//初始化
Node *head,*cur,*s;
head =(Node*)malloc(sizeof(Node));
head->next =NULL;
cur = head;for(int i =0; i < n; i++){
s =(Node*)malloc(sizeof(Node));
s->num = i +1;
s->next = cur->next;
cur->next = s;
cur = s;}
cur->next = head->next;return head;}voiddeleteNode(Node *a){
a->num = a->next->num;
Node* b = a->next;
a->next = b->next;delete(b);}intmain(){int N =5;
Node* head =Children(N);
Node* last = head->next;while(last->next!=last){
last = last->next->next;deleteNode(last);}printf("%d", last->num);return0;}