Характер указателей, являющихся NULL в C++, кажется, чувствует себя произвольным. Я уверен, что есть метод, который мне не хватает, но следующее имеет смысл для меня, но, похоже, не работает. У меня есть следующий метод для добавления узла в связанный список:Вопрос о связанных списках/указателях в C++
LLNode *ll; // set to NULL in constructor.
void addToLL(Elem *e)
{
LLNode *current = ll;
while(true)
{
// edge case of an empty list.
if (ll == NULL)
{
ll = new LLNode(e);
break;
}
else if (current == NULL)
{
current = new LLNode(e);
break;
}
else {
current = current->next;
}
}
}
При добавлении 2-й узел в списке, в случае current == NULL
не поймают, поэтому он пытается вызвать current = current->next
и аварий сделать для доступа к неверная память. Почему это так? LLNode имеет указатель на элемент Elem и указатель, который называется рядом с другим LLNode.
Ваша логика вставки неверна: вы меняете указатель 'current', но вы никогда не меняете указатель' next' любого узла, чтобы указать на новый элемент в связанном списке. Как написано, в вашем списке никогда не может быть более одного узла. –
Поскольку вы говорите, что вы устанавливаете 'll' в NULL в конструкторе, является ли он членом класса? Является ли эта функция addToLL методом класса? – tenpn
Извините, для краткости я разрезал это. И ll, и метод являются членами одного и того же класса. – waterbo