c++ - 链表的循环遍历

标签 c++ data-structures linked-list

所以我在使用其中一个函数时遇到了一些问题。该程序(用 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 设置为 pFrontNULL 来启动它;没有区别。

关于c++ - 链表的循环遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12656745/

相关文章:

c++ - 查找数组中的最大值

c++ - 在基本 vector 的元素上调用派生方法(给出的示例)

Java:通过修改作为参数传递的对象来使数据结构无效

c++ - 使用递归打印链表元素

java - 复制构造函数断言错误

c++ 基类和派生类约束

c++ - 如何使用指针和指针运算

c - 程序为什么在循环链表的第一个元素之后插入节点?

c++ - 根据键的类型选择 map 或 unordered_map

java - 不能从另一个类调用方法?