2013-05-09 93 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