Доброго времени суток, я давно бьюсь над задачей создания связного списка, и не получается добавлять элементы.
Суть в том, что функция добавления элемента работает правильно, но как только происходит выход из функции списка как-бы и нет...
И так:
Вот структура элемента:
struct Node
{
string word;
Node* next;
};
Есть функция инициализации списка:
Node* init(string str)
{
Node* item = new Node;
item->word = str;
item->next = NULL;
return item;
}
Допустим список инициализирован(с ней проблем нет), и я хочу добавить новый элемент вызывая следующую функцию:
void AddNode(Node* pfirst, string str)
{
Node *tmp, *item = new Node;
item->word = str;
item->next = NULL;
tmp = pfirst;
while (tmp->next != NULL)
tmp = tmp->next;
tmp->next = item;
delete tmp;
}
Согласно отладчику:
Список передаётся в функцию и добавляется новый элемент, но после завершения этой функции список превращается в мусор.
Вот так выглядит Main:
int main()
{
Node* head = NULL;
head = init("One");
AddNode(head, "Two");
PrintList(head); // Функция печати списка
return 0;
}
Собсна вопрос: при передачи списка в функцию - это тот же список или новый, который просто так не вернётся указателю
head? Мне что, нужно возвращать список return'ом? Как это реализовать?
Весь код:
spoilerstruct Node
{
string word;
Node* next;
};
Node* init(string str)
{
Node* item = new Node;
item->word = str;
item->next = NULL;
return item;
}
void AddNode(Node* pfirst, string str)
{
Node *tmp, *item = new Node;
item->word = str;
item->next = NULL;
tmp = pfirst;
while (tmp->next != NULL)
tmp = tmp->next;
tmp->next = item;
delete tmp;
}
void PrintList(Node* pfirst)
{
Node* tmp = pfirst;
while (true)
{
cout << tmp->word << endl;
if (tmp->next == NULL) break;
tmp = tmp->next;
}
}
int main()
{
Node* head = NULL;
head = init("One");
AddNode(head, "Two");
return 0;
}
Не предлагайте создание списка классом, мне нужно выполнить именно так. Спасибо!