数据结构——求循环节

来源:互联网 发布:清华大学知乎 编辑:程序博客网 时间:2024/06/06 09:31
void change( int n, int m, NODE * head ){    int already_have[10000]={0};    int i,i_1,judge[10000]={0};    NODE *then,*go_on,*check;    go_on=head;    then=(NODE*)malloc(sizeof(NODE));    go_on->next=then;    then->data=n*10/m;    then->next=NULL;    go_on=then;    judge[0]=n;    for (already_have[0]=1,i=1,already_have[n]=1,n=n*10%m; already_have[n]!=1; already_have[n]=1,n=n*10%m,i++) {        judge[i]=n;        then=(NODE*)malloc(sizeof(NODE));        go_on->next=then;        then->data=n*10/m;        then->next=NULL;        go_on=then;    }    if (n!=0) {        for (i_1=0,check=head->next; check!=NULL; check=check->next,i_1++) {            if ((n)==judge[i_1]) {                break;            }        }        then->next=check;    }}NODE * find(NODE * head,int *n){    NODE *point[10000]={0};    NODE *p,*check;    int i,i_check,flag=0;    for (p=head->next,i=0; p!=NULL; p=p->next,i++) {        for (check=p,i_check=0; i_check<i; i_check++) {            if (check==point[i_check]) {                flag=1;                break;            }        }        if (flag==1) {            break;        }        point[i]=p;    }    if (flag==0) {        *n=0;        return NULL;    }    else{        *n=i-i_check;        return check;    }}