我们的教授给我们一个问题: 假设您有一个指向现有列表(名为head)的头部的指针。链表的节点是struct Node类型(如第754页的display 13.7所定义)。编写一个for循环来遍历列表并打印列表中每个其他元素的数据(从第一个元素开始)。
我不知道,请帮助我,谢谢!
答案 0 :(得分:0)
Node类型通常具有与之关联的Node类型属性。这又称为链接,可以让您遍历列表。因此,例如,如果您具有指向第一个节点的指针,则该节点对象具有作为下一个节点的字段。因此,您可以在for循环中使用它来从节点到节点。在这个循环中,你显然需要不计算每个其他节点,然后它只是每个其他节点中的print语句的问题。您可以通过拥有一个当前节点字段然后只更新您所在的位置来实现此目的,直到您到达具有空链接的节点,或者如果您知道大小,则已到达链的末尾。 This link may help you with the syntax and understanding pointers.
答案 1 :(得分:0)
假设每个Node都有一个数据成员和一个指向下一个节点的指针/引用,你可以像往常那样进行while循环,但只能在奇数或偶数迭代上输出,所以你的代码看起来像: / p>
for(Node* myList = head, int i = 0; myList != nullptr; myList = myList->next, ++i)
{
if(i % 2) == 0)
{
std::cout << myList->data << std::endl;
}
}
所有这一切都是通过列表查看i
是否为偶数,如果是,则输出当前节点中的数据。当它到达nullptr
时,这就是列表的结尾。您无法myList = myList->next->next
的原因是您不想尝试超越列表的末尾并访问未提供给您的内存,或尝试取消引用空指针
您也可以轻松地if((i % 0) == 1)
来获取每个其他节点的奇数集。