Это только дополнение к melpomene ответ , отвечая на комментарии:
Как мне создать n узлов? Использование векторов запрещено, поэтому я создаю связанный связанный список из n узлов, но проблема в том, что я не могу создать n узлов в цикле.
На самом деле, ваш код был менее неправильным, чем вы думали, только вы пропустили один важный момент:
nn->next = n;
С помощью этой инструкции вы потеряли последнюю ссылку на то, на что изначально указывал nn
, и вы никогда не сможете получить ее снова ...
Вам еще нужен второй указатель на элемент, созданный изначально , так что вы больше не потеряете заголовок списка и, следовательно, остальную часть списка:
node* nn = new node(); // this is the C++ way...
node* head = nn; // now you have a second pointer to the head...
for(int i=0;i<10;i++)
/* [...] */
Теперь вы можете получить доступ ко всем узлам, которые вы создали, с помощью указателя head
(до тех пор, пока вы не сдвинете его с ...).
Избавьтесь от цикла и просто используйте struct * n = malloc (sizeof * n * 10); - Дэвид С. Ранкин
Другой вариант: создание 10 элементов напрямую ... Предполагается, что узел выглядит так:
struct node
{
Data data;
node* next;
};
Тогда вы получите 10 элементов Data
просто на
Data* allData = new Data[10]; // again using the C++ way...
У подхода C ++ есть еще одно преимущество: элементы в массиве уже инициализируются при вызове конструктора по умолчанию (для примитивных типов данных см. здесь ).