2013-10-22 105 views
0

我試圖讓我可以調用insert_back工作的功能,它會將該值插入到列表插入鏈表

到目前爲止,我的代碼的結束,我想我已經成爲背難倒。

template <class Object> 
void List<Object>::insert_back(const Object& data) { 
    ListNode<Object>* newnode = new ListNode<Object>(data, head->getNext()); 
     if (!head) { 

      head = newnode; 
      return; 
     } 
     while (head->getNext()) { 
      continue; 
     } 
     head->setNext(newnode); 
    } 

這不返回任何和扼流圈程序的時候我打電話insert_back

.h文件

#ifndef LIST_H 
#define LIST_H 
#include <iostream> 
#include "ListNode.h" 
#include "ListIterator.h" 

namespace cs20 { 

template <class Object> 
class List { 
    public: 
    List(); 
    List(const List& rhs); 
    ~List(); 

    bool isEmpty() const; 
    bool isIncreasing() const; 
    void makeEmpty(); 
    ListIterator<Object> zeroth() const; 
    ListIterator<Object> first() const; 
    void insert(const Object& data, 
       const ListIterator<Object> &iter); 
    void insert(const Object& data); 
    void insert_back(const Object& data); 
    ListIterator<Object> findPrevious(const Object& data) const; 
    void remove(const Object& data); 

    const List& operator =(const List& rhs); 
    const List& operator <<(const List& rhs); 
private: 
    ListNode<Object> * head; 

}; 

} 
#endif 
+0

[Insert from back:Linked List](http://stackoverflow.com/questions/19076294/insert-from-back-linked-list) –

+0

您能否提供更多關於您嘗試過的內容的詳細信息到目前爲止,你遇到了哪些具體的錯誤,以及你的測試代碼是什麼?我們不一定能夠重現錯誤。 – templatetypedef

回答

3

改變你的代碼如下:

ListNode<Object>* lastNode = head; 
while (lastNode->getNext()) 
    lastNode = lastNode->getNext(); 
lastNode->setNext(newnode); 
+0

謝謝! 只有這樣,雖然這工作....它重複無限次的數字列表,直到我必須手動停止程序.. – rezivor

+0

比你有錯誤的節點添加邏輯的地方創建節點循環,當下一個點本身而不是下一個或NULL,也檢查評論@paddy - 可能是循環問題的根源 –

+0

偉大的,我應該能夠麻煩拍攝它的其餘部分, 非常感謝! – rezivor

1

這看起來可疑:

ListNode<Object>* newnode = new ListNode<Object>(data, head->getNext()); 

您正在將head->getNext()傳遞到您的新節點。我假設參數初始化新列表節點中的下一個指針。你一定要通過NULL而不是列表的第二個元素。

另一個問題是您在insert_back內部修改了headhead變量是您班級的成員。如果您將頭部一直移動到列表末尾,則會丟失列表。相反,使用臨時變量進行迭代。

0

除非你真的不在乎在所有關於性能,你可能想添加一個ListNode<Object> *tail;List類。保持它指向列表中的最後一個節點。當您需要添加新節點時,請將新節點添加到它指向的節點之後,並將其更新爲指向剛剛添加的新節點。