2012-11-04 19 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