Эта функция
int listAddNode(listNode data){
if(end==nullptr && head==nullptr)
end=head=&data;
else{
end->next=&data;
(&data)->previous=end;
end=&data;
end->next=nullptr;
}
return 0;
}
вызывает неопределенное поведение, поскольку конец указателя будет указывать на локальные переменные данных функции, которые не будут активны после выхода из функции.
Также обратите внимание к этому, поскольку оператор
int operator+ (char const & data){
return listPush(data);
};
возвращает int, тогда это утверждение
test+'A'+'B';
не имеет смысла.
Было бы лучше объявить оператор +=
Например
LinkedList & operator +=( char const & data );