Ну, во-первых, для общего использования вы должны использовать Стандартную библиотеку: std:vector
, или, если вам действительно нужен связанный список, std::list<>.
Но, поскольку это упражнение самообучения, мы пропустим это.
Что приводит нас к следующей проблеме: как учебное упражнение, на самом деле это не рабочий код, на что нам жаловаться? Кут в середине функций ??
Одна конкретная проблема, которую я увидел, была такая:
read = new node;
read->next = NULL;
read->value = val;
Конструктор для объекта узла должен обрабатывать установку его next
члена на ноль. В этом отношении он должен также обрабатывать установку значения, так что этот код должен быть действительно:
read = new node(val);
Еще одна проблема: в pop () у вас есть:
node* write = read;
if(read->next == NULL)
{
delete read;
read = NULL;
return write;
}
Установка read
на ноль - бессмысленна - это локальная переменная, которая вот-вот выйдет из области видимости. И вы возвращаете write
, что равно read
, который был удален.
Кроме того, вы почти не используете в коде функции C ++ и объектно-ориентированного программирования: если мы игнорируем cout, то в основном это просто код C, который выделяет память через new & delete. Как я уже отметил, это может принести пользу конструктору. Также может быть полезен деструктор плюс класс List, который будет содержать головной узел и будет иметь все ваши функции в качестве членов.