注册 登录
编程论坛 C语言论坛

c语言用链表写了一个约瑟夫环的问题,不知道错哪了,求大佬解答。

魂之子 发布于 2020-03-18 21:24, 1461 次点击
//一个自定义人数,每三人剔除一个。
#include<stdio.h>
#include<stdlib.h>

int main(){
    struct node{
        int num;
        struct node* next;
    };
    typedef struct node node;
    node* head,*p,*q;
    head = (node*)malloc(sizeof(node));
    head->num = -1;
    head->next = head;
    printf("请输入人数;\n");
    int i;
    scanf("%d",&i);
    for( ;i>0;i--){//建立链表
        p = (node*)malloc(sizeof(node));
        p->num = i;
        p->next = head->next;
        head->next = p ;
    }
    while(p->next!=head){
        p = p->next;
    }
    p->next = head->next;
    int k,j;
    for(j=0; j<i-1;j++){
        for( k=1; k<3; k++){
        p = p->next;
        }
        q = p->next;//要释放的是q
        p->next = q->next;
        free(q);
        
    }
    printf("最终剩下的人%d",p->num);
   
    return 0;
}
1 回复
#2
魂之子2020-03-19 19:22
我自己找到错误了。。。。尴尬。
1