У вас есть ряд проблем в вашем коде:
- Ваш
node
следующий и предыдущий члены никогда нигде не инициализируются и, как следствие, не определены при использовании. Либо добавьте конструктор в node
, либо убедитесь, что он инициализирован после выделения.
- Добавление узла в пустой список неверно.
first->next
не определено, и почему вы создаете два узла, первый и последний? В списке с одним элементом затем first == last
. Настройка next / previous в first / last также не имеет никакого смысла.
- В правильно сформированном двойном связном списке
last->next
всегда должен быть нулевым, как и first->previous
.
- Добавление узла в непустой список также некорректно.
- Хотя вы не показываете это в примере, вам в конечном итоге понадобится деструктор, а также оператор копирования и конструктор копирования (правило трех). В данный момент у вас происходит утечка памяти, и если вы попытаетесь удалить узлы, вы, вероятно, приведете к двойному освобождению и падению.
Я бы предложил немного отступить от кода, чтобы убедиться, что вы правильно понимаете концепции, стоящие за двусвязным списком. Нарисуйте список на бумаге со стрелками next / prev и посмотрите, как их нужно изменить при добавлении узлов в пустой / непустой список, а также как удалять и перемещать узлы вокруг. После того, как вы выясните, как следует установить next / prev, его преобразование в код должно быть относительно простым.
Изменить, чтобы ответить на комментарий:
Чтобы добавить новый узел, вы можете технически добавить его где угодно, но обычно он добавляется в конце (по крайней мере из того, что я видел). Смотрите другие ответы для полного и правильного кода для добавления новых узлов в пустой и непустой список.