типы создания нового узла связанного списка, когда использовать что - PullRequest
0 голосов
/ 12 февраля 2020
  1. node *x = NULL;
  2. node *x = new node();

В чем разница между этими двумя различными созданиями узлов? Почему мы не делаем 2-й тип при создании головы и вообще используем 1-й тип? Разве мы не можем делать нулевое назначение каждый раз при создании нового? Или мы не можем каждый раз выполнять функцию "new node ()"? Когда что использовать, это очень запутанно.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020
node *x = NULL;       // 1
node *x = new node(); // 2

В чем разница между этими двумя различными созданиями узлов?

Первый не создает узел. Второй делает.

Первый создает указатель на узел и устанавливает указатель в NULL, что означает, что он ни на что не указывает.

Второй создает указатель на узел, создает узел и устанавливает указатель так, чтобы он указывал на только что созданный узел.

node *x = y; - это то же самое, что и node *x;, а затем x = y;. Оба имеют часть node *x; (которая создает переменную указателя), но вторая часть отличается.

Почему мы не делаем 2-й тип при создании головы и используем 1-й вообще? ?

Вы бы использовали первый, если вы хотите новый указатель, который указывает на NULL, и второй, если вы хотите новый указатель, который указывает на новый узел.

Разве мы не можем выполнять нулевое назначение каждый раз при создании нового? Или мы не можем каждый раз выполнять функцию "new node ()"? Когда что использовать, это очень сбивает с толку.

Это зависит от того, какой вы хотите. Этот вопрос похож на вопрос: могу ли я каждый раз делать int i = 4;? Или мы не можем сделать int i = 7 + 3; каждый раз? Когда мне следует использовать int i = 7 + 3; вместо int i = 4;?

0 голосов
/ 12 февраля 2020

В чем разница между этими двумя различными созданиями узлов?

Обычно nullptr обозначает пустое дерево; указатель на уникальное Node дерево с простым листом.

node* empty_tree = nullptr;
node* leaf = new Node;
...