在C ++中设置节点的内存地址

时间:2017-11-14 21:24:45

标签: c++ list nodes

我似乎无法理解如何构建将节点添加到链表中的函数。

到目前为止,我有这个。

void StringList::add(string value){
StringNode *temp = new StringNode;
temp->data = value;
temp->next = NULL;

if(head==NULL){
    head = temp;
    temp = NULL;
}

我不明白每次添加到列表时如何设置上一节点的内存地址。理想情况下,我会给自己一个尾节点,但是我提供了一个驱动程序和一个头文件,它们将保持不变。任何见解将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果您想要将新节点添加到列表的末尾而不保留tail,则每次都必须浏览整个列表:

void StringList::add(string value){
  StringNode *temp = new StringNode;
  temp->data = value;
  temp->next = NULL;

  if(head==NULL){
     head = temp;
  }
  else {
     StringNode* last = head;
     while (last->next) {
       last=last->next;
     }
     last->next = temp;
  }
}

答案 1 :(得分:0)

解决此问题的最简单方法当然是使用std::list

list<string> l { "blue", "red", "white" }; 
l.push_back("yellow"); 

如果您有义务将内存分配用于教育目的,并且您必须通过手动内存分配等等,则必须遍历列表以查找最后一个节点:

...
if(head==NULL){
   ...
}
else {
    StringNode *i=head;  
    while (i->next)  // stops when the next element is NULL, so last element
        i = i->next;
    i->next = tmp;   // i is last element, so just connect to the new node
}