关于使用链表解决约瑟夫环的小问题 5C

void LinkList::Ring(int i)
{
Node *pre=first,p=pre->next;
int count=2;
while(p!=pre)
{
if(count==i)
{
cout<data< pre=p->next;
delete p;
p=pre->next;
count=2;
}
else
{
pre=pre->next;
p=p->next;
count++;
}
}
cout<data;
delete p;
}

图片说明
请大家帮忙看一下程序的问题?不知道是不是while(p!=pre)那里有问题

0

2个回答

没仔细看,目测pre=p->next;
这里少了
pre->next = p->next->next;

4
xxxuuuooo
xxxuuuooo 我是在 pre=p->next; 后面delete p; p=pre->next; 也可以吧,因为既然pre的位置已经变了,那么pre->next也随之改变,不用特别去声明把
大约一年之前 回复

不知道你的链表是否有头结点,如果有头结点,while(p!=pre)是不对的;如果没有头结点,while(p!=NULL&&pre!=NULL&&p!=pre)。
if(count==i)
{
coutnext;//这里应该是cout<next;

1
xxxuuuooo
xxxuuuooo 这里是按循环链表处理的。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!