Здесь у меня есть некоторые строки кода. У меня проблемы с:
struct Node
{
String data;
Node * next;
};
struct List
{
Node * head;
};
static Node * nouvNode (string word,Node *p = nullptr){
Node *pNouv = new Node ;
pNouv->data =word;
pNouv->next = p;
return pNouv;
Хорошо, вот мои вопросы:
1) pNouv здесь является указателем, который я создал, указав на узел. Когда я выполняю pNouv=>next=p
, означает ли это, что мой указатель в pNouv указывает на следующий узел, на который указывает указатель p? Или мой указатель указывает на заметку, которая тоже имеет указатель, который указывает на другой узел, где P указывает на тот же путь?
2) static Node * nouvNode (string word,Node *p = nullptr)
Это метод создания нового узла с данными в нем, но зачем ему нужно "Node * p = nullptr" в параметре? Когда я создаю узел в своей программе, я делаю это nouvNode(word, ls.head)
например.
Спасибо за помощь.
pNouv->next=p
В соответствии с моим пониманием, если вы выполняете вышеуказанный оператор, узел pNouv
начинает указывать на p
узел, который является не чем иным, как NULL
. Таким образом, выражение выше кода эквивалентно
pNouv=>next=NULL;
2) static Node * nouvNode (string word,Node *p = nullptr)
Передача Node *p = nullptr
качестве второго параметра является необязательной. Вам просто нужно word
. Вы всегда можете создать новый узел в теле функции и пересечься с головы, а затем в конечном итоге позиционировать вновь созданный узел в нужном месте.
1) pNouv->next = p
означает, что член структуры, next
в структуре, на которую указывает pNouv
, настроен на то же, что и p
. Итак, есть блок памяти. pNouv
указывает на этот блок памяти. Где-то внутри этого блока памяти вы помещаете адрес из p
.
2) дополнение = nullptr
делает этот параметр необязательным. Вы могли бы просто вызвать nouvNode(word)
и вы получили бы узел со значением word
помещенного в него, которое не указывало ни на что, как на следующий узел.