Односвязный список C++
Всех приветствую! Есть несколько недопониманий касаемо кода программы. Знаю, что тут не любят подобные вопросы, но все же. 1) Насколько я понимаю все указатели типа Node* имеют поля данной структуры, тогда в 22 строчке (tmp = nd) мы присваиваем указателю tmp только ссылку или все поля tmp становятся равными полям nd + присваивание самой ссылки? 2) Не совсем понимаю как я связываю узлы между с собой, если меняется только tmp? 3) Откуда у tmp значение в поле val? Значения полей указателей зависят от адреса, который они хранят?
#include <iostream>
#include <vector>
struct Node {
Node* NextNode = nullptr;
int val = 0;
};
struct forward_list {
Node* start;
Node* tmp;
forward_list() : start (nullptr) , tmp (nullptr)
{}
void push(int val) {
Node* nd = new Node;
nd->val = val;
nd->NextNode = nullptr;
if (start == nullptr) {
start = nd;
tmp = nd;
return;
}
tmp->NextNode = nd;
tmp = tmp->NextNode;
}
void printList()
{
Node* tmp = start;
while (tmp!= NULL)
{
std :: cout << tmp->val << std :: endl;
tmp = tmp->NextNode;
}
}
};
int main()
{
using namespace std;
forward_list list;
list.push(1);
list.push(2);
list.push(3);
list.printList();
}