标题:约瑟夫环链表实现,还是无法输出,怎么办。。
只看楼主
好烦、
Rank: 2
等 级:论坛游民
帖 子:78
专家分:72
注 册:2020-10-10
结帖率:87.5%
已结贴  问题点数:20 回复次数:2 
约瑟夫环链表实现,还是无法输出,怎么办。。
有n个人围成一圈,顺序从1开始排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。要求用循环链表实现。
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct ptr//链表结构 
{
    int a;
    struct ptr *next;
}ptr;

int main ()
{
    int n,i;
    ptr head;
    ptr *t=&head;
    scanf("%d",&n);
    for(i=0;i<n;i++)//初始化链表作编号,依次1,2,3,4... 
    {
        ptr *circle_node=(ptr*)malloc(sizeof(ptr));
        t->next=circle_node;
        t=circle_node;
        t->a=i+1;
    }
    ptr *node=&head;//把尾节点连接到头结点 
    ptr *front;
    t->next=node->next;
    free(node);
    while(t->next!=0)//链表长度大于一个元素时 
    {
        for(i=0;i<3;i++)//报数三次 
        {
            front=t;
            t=t->next;
        }
        node=t;
        front->next=t->next;
        t=front;
        free(node);
    }
    printf("%d",t->a);
    return 0;
}


搜索更多相关主题的帖子: next head 链表 int node 
2021-01-11 19:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
程序代码:
#include <stdio.h>
#include <stdlib.h>

struct ptr
{
    unsigned index;
    struct ptr* next;
};

int main( void )
{
    unsigned n;
    scanf( "%u", &n );

    struct ptr* phead = NULL;
    {
        struct ptr** pplast = &phead;
        for( unsigned i=0; i!=n; ++i )
        {
            *pplast = malloc( sizeof(struct ptr) );
            (*pplast)->index = i+1;
            pplast = &(*pplast)->next;
        }
        *pplast = phead;
    }

    for( ; phead->next!=phead; )
    {
        struct ptr* tmp = phead->next->next;
        phead->next->next = tmp->next;
        phead = tmp->next;
        free( tmp );
    }
    printf( "%u\n", phead->index );
}
2021-01-12 09:25
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:10 
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct ptr//链表结构
{
    int a;
    struct ptr *next;
} ptr;

int main ()
{
    int n,i;
    ptr head;
    ptr *t=&head;
    scanf("%d",&n);
    for(i=0; i<n; i++) //初始化链表作编号,依次1,2,3,4...
    {
        ptr *circle_node=(ptr*)malloc(sizeof(ptr));
        t->next=circle_node;
        t=circle_node;
        t->a=i+1;
    }
    t->next=head.next;//把尾节点连接到第一个结点
    t=t->next;//定位到 第一个节点

    ptr *node;
    int j=1;
    while(t->next!=t)//链表长度大于一个元素时
    {
        t=t->next;
        j++;
        if(j==2)
        {
            node =t->next;
            t->next=t->next->next;
            free(node);
            j=0;
        }

    }
    printf("%d",t->a);
    return 0;
}


不会链表,不知道合不合语法基本规则,不知道这样引用节点和释放内存对不对

[此贴子已经被作者于2021-1-13 09:53编辑过]

2021-01-12 16:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504610-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.127476 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved