Узел a - это объект. Он выделяет место в памяти. Node * s1 - указатель на объект типа Node, но сам объект должен быть создан, например, с помощью оператора new. Или мы должны явно взять и адрес объекта с помощью оператора &. Это просто переменная, содержащая адрес. Размер этой переменной зависит от платформы (4 байта на x86, 8 байтов на x86_64).
Каждый узел связанного списка хранит указатель на следующий узел. Вот почему нам здесь нужен указатель. Таким образом, если у вас есть доступ к узлу, вы можете перейти к следующему и концу списка.
Заявление об ограничении ответственности: данный код очень базовый c и приведен только для объяснения. Это не то, как вы создаете связанный список в реальной жизни. Соединение узлов вручную - не лучший вариант. Я бы порекомендовал вам узнать больше о базовых c языковых концепциях, таких как указатели, ссылки, время жизни объекта.
// Node type definition
struct Node
{
int w;
Node* w1;
};
int main() {
// Separate nodes
Node n1;
Node n2;
Node n3;
// Now this is a linked list
n1.w1 = &n2;
n2.w1 = &n3;
n3.w1 = nullptr; // to mark the end
// Get pointer to n2 from n1
Node *n2_ptr = n1.w1;
Node *n3_ptr = n2.w1;
// Check if n3 is the last element
if (n3_ptr->w1 == nullptr) {
// this is the end of the list
}
// walk the list
Node *node = &n1;
while (node != nullptr) {
node->w *= 2; // do smth with data
node = node->w1; // go to the next node
}
return 0;
}