我被困在我的大学作业中了。
我有一个包含20个元素的链接列表,我必须从用户处获取值,如果用户输入5,则打印链接列表的最后5个元素
void traverse(List list) {
Node *savedCurrentNode = list.currentNode;
list.currentNode = list.headNode;
for(int i = 1; list.next() == true; i++)
{
std::cout << "Element " << i << " " << list.get() << endl;
}
list.currentNode = savedCurrentNode;
}
我正在尝试这个方法,但是这个方法打印了我的链表的所有元素
2条答案
按热度按时间6jygbczu1#
对于您所拥有的少量代码,请回顾:
对于正在编写链表的人来说,这段代码似乎有根本性的缺陷。我对处理链表的人的期望是他们即将停止作为一个初学者,但我在代码中没有看到这一点,也没有看到链表类的结构是什么。至少可以说,链表类是 * 怪异 * 的。
首先要说明的是,我的期望源于我把链表作业放在我的课程表中的什么位置,它也比这个链表更符合我的习惯。
如果你花时间仔细考虑这个项目,那么这个任务就变得微不足道了。大多数学生跳过了计划步骤,给自己制造了不必要的麻烦。
既然知道需要列表的总大小,为什么不直接将其作为成员数据呢?任何添加到列表中的函数都会相应地增加值。任何从列表中减去值的函数都会相应地减少值。这样,您就可以随时知道列表的大小。
知道列表的大小是最重要的。然后你需要做必要的算术来推进列表以满足你的要求。现在你可以打印了。
输出量:
bzzcjhmw2#
通过这个解决了我的问题,printFrom是一个变量,它的值是跳过的元素的数量,就像如果我的链表大小为20,用户想看到最后5个,那么printFrom存储15个,跳过15个值,并打印最后5个