所以我在下面有一个单独链接的列表,它根据导演的名字按字母顺序打印出电影对象的列表。我试图打印列表中的第一个元素(头(和最后一个元素(尾(,但我很难弄清楚如何打印。我试图打印出下面的头,但由于某种原因,它只是打印内存地址,而不是实际的对象值。
至于尾巴,我不太确定我将如何访问列表中的最后一个元素,我想知道是否有人可以提供指导或推动我朝着正确的方向前进?
编辑:实际上我意识到我应该打电话给head->数据->print((,就像我对当前节点打印头所做的那样。我只需要弄清楚如何在我的列表中保持头和尾,而不仅仅是头。
List.cc
void List::print() const{
Node* current = head;
while (current != NULL) {
current->data->print();
current = current->next;
}
cout << "HEAD: n" << head->data->print() << endl; //prints memory address?
// cout << "TAIL: n" << head << endl;
}
List.h
#ifndef LIST_H
#define LIST_H
#include "Movie.h"
class List{
class Node{
public:
Movie* data;
Node* next;
};
public:
List();
~List();
void add(Movie*);
void print() const;
private:
Node* head;
};
#endif
实际上有两个选项:
- 跟踪尾部:这听起来可能很愚蠢,但只需在类中添加一个私有节点*即可跟踪列表中的最后一个元素。如有必要,请不要忘记更新此指针
- 浏览列表:您知道头节点指向下一个节点。反过来,该节点将指向其后续节点。你看到图案了吗?您可以这样做,直到您碰到一个不指向下一个节点的节点。这是您的最后一个节点
如果你有一个很长的列表,第1点将是有利的。如果在这种情况下使用第2点,那么实际上必须遍历整个列表。然而,无论你选择哪一个选项,我都建议你从实施选项2开始。我认为这个选项会给你一些很好的见解。