2012-11-04 22 views
1

我正在为我的家庭作业写一个链表,我需要为我的程序的要求实现begin()和end()。如何为自定义链表容器编写end()?

开始()是相当容易

Node* List::begin(){return head;} 

我应该如何实现年底()?

+0

'return tail;'? –

+0

'begin()'和'end()'应该返回STL风格的迭代器,还是只返回一个'Node *'? (我怀疑这是一种STL风格的迭代器,但我认为最好确保它。) –

+0

作业标记已过时,不应再使用。请参阅http://meta.stackexchange.com/questions/147100。 –

回答

3

您可以返回一个NULL指针,或者如果您有自定义的tail节点,则返回该指针。如果它是一个循环双向链表,则可以返回哨兵节点。

请记住,检查列表的末尾的正确方法是调用List::end(),所以如果你正确设置你的List类,那么它并不完全不管你什么回报,只要

Node* node = mylist.begin(); 
while (node != mylist.end()) { /*... loop */ } 

工作和你退出while当你到达列表的末尾。所以最主要的是List::end()需要返回唯一的,如果你遍历列表的中间,你永远不会遇到。

+0

我没有尾巴,我只有一个Node *接下来;在我的Node类中。我会如何才能达到最终? – Instinct

+1

然后它会是一个'NULL'指针......换句话说,当'Node :: next == NULL'时,那么你在最后,列表中没有其他节点。 – Jason

+0

我很抱歉,但我没有看到返回null的一点。我希望end()返回一个指向我列表中最后一个节点的指针。 Ex)Node * lastNode = list.end(); – Instinct