所以我在使用其中一个函数时遇到了一些问题。该程序(用 C++ 编写)玩游戏, table 上坐着很多玩家。每次调用我的播放功能时,它都应该向控制台显示游戏中的玩家。每次调用它时,它都应该按顺序显示玩家。在它击中最后一个玩家后,它将从列表/表格的开头开始。 void CircleList::play()
LinkedListOfPlayersNode *p=(*pFront).pNext;
if (p->pData!=NULL)
{
cout<<p->pData->getName()+" takes a turn\n";
pLastPlayer = pLastPlayer->pNext;
}
else
{
cout<<"There are no players. Please ADD a player.\n";
}
}
假设我们添加了 A、B 和 C。当您使用 PLAY 命令时,C 应该轮到,然后是 B,然后是 A。就目前使用上面的代码而言,它会显示 C Takes但是,转弯之后它立即崩溃了。 那么我的代码有什么问题呢?有没有更好的方法来写这个?
最佳答案
我很确定您希望遍历看起来像这样:
LinkedListOfPlayersNode *p = pNextPlayer ? pNextPlayer : pFront;
if (p && p->pData) // not sure why pData is also dynamic. look into that.
{
cout<<p->pData->getName()+" takes a turn\n";
pNextPlayer = p->pNext;
}
else
{
cout<<"There are no players. Please ADD a player.\n";
}
每次轮到玩家时,他们都会接手,下一位玩家就是该玩家的下一个指针。当你在牌 table 上的最后一位玩家轮到你时,p->pNext 将为空,下一个调用将重置为列表的头部。
至少那是我认为您想要达到的目标。通过将 pNextPlayer
设置为 pFront
或 NULL
来启动它;没有区别。
关于c++ - 链表的循环遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12656745/