请问这个程序错在哪里?大家帮忙看一下
看到有人说约瑟夫环,用链表编了一下,编了半天,就是不出来,请高手帮我看一下。可能就是小问题,不过我现在头晕眼花,就是找不出来,大家帮帮忙啊。。谢谢了程序代码:
#include "stdio.h" #include "stdlib.h" struct ring {int number; struct ring *next; }; struct ring *create(int n) //创建约瑟夫环 { struct ring *head,*p,*q; int i; head=q=NULL; for(i=0;i<n;i++) { p=(struct ring *)malloc(sizeof(struct ring)); p->number=i; //开辟新节点ok if(head==NULL) head=p; else q->next=p; q=p; } q->next=head; return(head); } struct ring * delete(struct ring *q) //删除节点 { struct ring *p; p=q; while(p->next!=q) //因为是循环链表,所以这种方法可以找到上一节点 p->next=q->next; return(p->next); } void josephu(struct ring *p,int m,int n) //环操作 { int i,j; for(i=1;i<m;i++) { for(j=0;j<n;j++) p=p->next; printf("%d",p->number); p=delete(p); } } main() //主函数 { struct ring *h=NULL;int m,n; printf("\nInput m and n:"); scanf("%d%d",&m,&n); //m为总人数,n为每次数的数 h=create(m); josephu(h,m,n); }
[[it] 本帖最后由 紫ing~ 于 2009-8-4 23:40 编辑 [/it]]