Только переменные указателя temp1
и temp2
имеют локальную область видимости.Фактические узлы связанного списка (типа struct node
) распределяются в куче посредством вызова new
.Данные, выделенные в куче, сохраняются до тех пор, пока они не будут освобождены посредством вызова delete
.
. Это означает, что строка temp2->next = temp1
хранит адрес нового узла, который добавляется в конец списка, и этоинформация будет доступна при последующих вызовах функции addNode_AT_END
.
Код, похоже, имеет множество проблем - вы используете глобальные переменные, если только нет последующих вызовов к delete
где-то в вашей памятиУтечки, уже есть класс контейнера std std::list
, который доступен ...
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: Относительно вашего комментария - когда вы делаете вызов new node
, вы создаетеnode
объект в куче.Этот объект будет доступен для использования до следующего вызова delete
.
Когда вы совершаете вызов temp2->next = temp1
, верно следующее:
temp2
указывает наадрес в памяти, где хранится последний узел в списке (этот узел был бы создан путем вызова new
на последней итерации). - Присвоено значение переменной-указателя
temp1
как указатель next
для последнего узла в списке (данные «указали» на temp2
).Это означает, что адрес хранится в куче , а не в пределах локального указателя temp2
.
Когда ваша функция завершает работу, да переменные локального указателя temp1
иtemp2
выходит из области видимости, но выделенные узлы связанного списка heap не уничтожаются - и именно здесь хранятся адреса.
EDIT: Второй комментарий - в else
ветвь функции, указатель temp2
инициализируется так, чтобы указывать на начало списка строкой temp2 = startPTR;
Следующие строки (цикл while
) пересекают связанный список изголовной узел до тех пор, пока указатель temp2
не укажет на последний узел в списке (до temp2->next = NULL
)
На этом этапе новый узел добавляется в список, как обсуждалось выше.