2011-04-16 104 views
1

好吧,出於某種原因,這段代碼對於雙鏈表列表模板類Dlist的insertBack函數並不完全適用。雙鏈表列表插入方法問題

template <typename T> 
void Dlist<T>::insertBack(T *o) 
{ 
    node *findLast; 
    node* newNode = new node; 
    newNode->next = NULL; 
    newNode->prev = NULL; 
    newNode->o = o; 

    if (first == NULL){ 
     first = newNode; 
     last = newNode; 
    } else { 
     findLast = first; 
     while (findLast->next){ 
      findLast = findLast->next; 
     } 
     newNode->prev = findLast; 
     last = newNode; 
    } 

} 

第一個和最後一個對應於Dlist的第一個和最後一個節點。我的問題是最後'last'沒有被分配給newNode。當我調試(使用VS2010)時,newNode被正確地賦值了method參數的值,並且它的'previous'節點被正確地賦值給'findLast'。但是當我將最後一個賦給newNode時,什麼也沒有發生。

如果它不是很明顯,我很樂意發佈Dlist的實際類定義,儘管它是一個非常標準的鏈表。

感謝您的幫助!

+0

現在我覺得很傻,通過給定的,這是一個雙向鏈表列表進行迭代。 – Slims 2011-04-16 22:11:15

+0

請注意,您希望以同樣的方式實現單鏈表。如果必須遍歷列表,則追蹤尾部(最後一個)允許O(1)追加執行時間與O(n)相比較。 – 2011-04-16 22:49:47

回答

0

如果它是一個雙向鏈表和你保持最後一個節點的跟蹤......爲什麼你迭代通過它一路追加到盡頭?

所有你需要做的是:

node* newNode = new node; 
newNode->o = o; 
newNode->previous = last; 
last->next = newNode; 
last = newNode; 
+0

啊。非常感謝。我是鏈接列表的初學者,只是在這裏首先潛水。 – Slims 2011-04-16 22:07:02

0

你缺乏一個findLast->next = newNode;