我似乎无法理解如何构建将节点添加到链表中的函数。
到目前为止,我有这个。
void StringList::add(string value){
StringNode *temp = new StringNode;
temp->data = value;
temp->next = NULL;
if(head==NULL){
head = temp;
temp = NULL;
}
我不明白每次添加到列表时如何设置上一节点的内存地址。理想情况下,我会给自己一个尾节点,但是我提供了一个驱动程序和一个头文件,它们将保持不变。任何见解将不胜感激。
答案 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
}