#include "stdio.h" #include "malloc.h" #include "stdlib.h" typedef struct node { int val; struct node *next; } NODE; NODE* creat(int *p, int n) { int i; NODE *head = (NODE *)malloc(sizeof(NODE) *n); // head的指向是一个数组,因此不能单打free()他中的任何一个元素 if(head == NULL) exit( 0 ); for(i = 0; i < n; i++) { head[i].val = p[i]; head[i].next = &head[i+1]; } head[n-1].next = &head[0]; return head; } NODE* find(NODE *p) { NODE *s = p; do { s = s->next; } while(s->next != p); return s; } int del(NODE *p) { NODE *s = find(p); s->next = p->next; if(s->next == s) return 1; return 0; } void f(NODE *head, int m) { NODE *q = head; NODE *s; int i; for( ; ; ) { i = 0; while(i != m-1) { q = q->next; i++; } s = find(q); printf("->%d",q->val); if(del(q)) { printf("->%d",q->next->val); return ; } q = s->next; } } void prt(NODE *head) { NODE *p = head; do { printf("->%d",p->val); p = p->next; } while(p != head); } int main() { int m, n, i; NODE *head,*s,*q; int *p; //scanf("%d %d",&n, &m); n = 9, m = 4; p = (int *)malloc(sizeof(int)*n); for(i = 0; i < n; i++) p[i] = i+1; head = creat(p,n); prt(head); printf("/n从1到%d, 数到%d出来依次为/n",n,m); printf("/n"); f(head,m); printf("/n"); free(head); return 0; }