m0_67830870 2022-11-10 14:22 采纳率: 62.5%
浏览 25
已结题

循环单链表解决约瑟夫问题,哪里出错了呀,为什么出列顺序输出不了

#include "2.2.h"

int main()
{
LNode * L;
int n, s, m;
printf("有n个人,从s开始,数到m出列,请依次输入n,s,m的值:\n");
cin >> n >> s >> m;
InitList(L, n);
DispList(L,n);
printf("\n");

Josephu(L, n, s, m);
return 0;

}

void DispList(LNode* L, int n) //输出循环链表
{
printf("循环链表:\n");
for (int i = 0; i < n; i++)
{
printf("%d ",L->data);
L = L->next;
}

}

bool InitList(LNode*& L, int n) //初始化循环单链表,data值为1,2,3,4,...
{
L = (LNode*)malloc(sizeof(LNode));
if (L == NULL)
return false;
L->next = L;
L->data = 1;
LNode* p;
for (int i = n; i >1; i--)
{
p = (LNode*)malloc(sizeof(LNode));
if (p == NULL)
return false;
p->next = L->next;
L->next = p;
p->data = i;

}

}

bool Josephu(LNode*& L, int n,int s,int m) //n个人,从s开始,数到m出列
{
LNode* p = L;
LNode* q;
q = (LNode*)malloc(sizeof(LNode));

    for (int i = 1; i <= n; i++)
    {
        p = (LNode*)malloc(sizeof(LNode));
        if (p == NULL)
            return false;
        if (p->data == s)
            break;
        p = p->next;   //找出s的位置,并用p记录
    }

    printf("依次出列的顺序为:\n");
    for (int i = 0; i < n; i++) //n次出列
    {
        p = (LNode*)malloc(sizeof(LNode));
        if (p == NULL)
            return false;
        int j = 1;
        while (j < m)
        {
            p = p->next; //依次报数,当j=m时,结束循环,找到相应的p结点
            j++;

        }

       printf("%d ", p->data);
        //将当前数据域输出,并修改当前数据域为下一结点的数据域,并修改当前的数据域为下一结点的数据域,
        //同时指向下一结点的下一结点,用来删除当前结点
        
        q = p->next; //用q保存p的下一结点
        p->data = p->next->data;//p的数据域改为下一结点的数据域
        p->next = p->next->next;//指向下一结点
        free( q);

    }
}

img

  • 写回答

2条回答 默认 最新

  • 於黾 2022-11-10 14:29
    关注

    Josephu函数,第一个循环就没写对
    循环里你给p分配新的内存空间了,那后面的判断能成功才怪,它跟L没有一毛钱关系呀

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月12日
  • 已采纳回答 12月12日
  • 创建了问题 11月10日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备