2013-05-09 80 views
0

這段代碼有什麼問題?在調試後,我在runner = runner->next;處得到一個錯誤,但我沒有看到它有什麼問題。鏈接列表 - 模板 - 指針

void Linkedlist<T>::add(T item) 
{ 
    if (root == 0) 
    { 
     root = new Node<T>(item); 
     cout << "Add, Root is empty \n"; 
    } 
    else 
    { 
     cout << "Add, Root is not empty \n"; 
     Node<T> * runner = root; 
     while (runner != 0) 
     { 
      runner = runner->next; 
     } 
     runner = new Node<T>(item); 
    } 
} 

回答

2

它應該是這樣的:

Node<T> * runner = root; 
while (runner->next != NULL) 
{ 
    runner = runner->next; 
} 
runner->next = new Node<T>(item); 

您的代碼只改變一個局部變量,而不是實際的節點。 (請注意runner->next是您的實際列表中的一個對象,而runner只是一個局部變量。)

+0

謝謝,它的工作原理,但我得到了「分段錯誤」。當我調試它。 – 2013-05-10 00:14:25

+0

@AdegokeA你是否將任何'根'鏈表設置爲'NULL'? – 0x499602D2 2013-05-10 00:23:55

+0

@AdegokeA:您仍然需要另一個檢查「root」是否爲空的分支,並確保正確初始化節點。 – 2013-05-10 08:08:17