Я пытаюсь реализовать связанный класс списка в C++, и у меня возникла проблема. У меня есть оператор + =, который добавляет новый узел.C++ не сохраняет изменения другим способом
связанный интерфейс списка классов:
template <typename Type>
class LinkedList {
public:
LinkedList<Type>* head;
// linked list stracture
Type data;
LinkedList<Type>* next;
// others ....
size_t length;
public:
LinkedList();
~LinkedList();
void initializeHead(LinkedList<Type>* headPtr);
size_t size() const;
LinkedList& operator+=(const Type& add);
void operator-=(const Type& remove);
LinkedList<Type>& operator[] (const size_t index) const;
bool operator== (const LinkedList<Type> &versus) const;
friend ostream& operator<< (ostream& out,LinkedList& obj);
};
и здесь я есть + = перегрузка реализации:
template <typename Type> LinkedList<Type>& LinkedList<Type>::operator +=(const Type& add) {
// head ptr - :)
LinkedList<Type>* p = head->next;
// go to the end
while(p) p = p->next;
// now on end - create new..!!!
try {
p = new LinkedList<Type>;
} catch (bad_alloc& e) {
cout << "There\'s an allocation error....";
} catch (...) {
cout << "An unknown error.." << endl;
}// fill and done
p->data = add;
p->next = NULL;
// increment length .........
++head->length;
// done ............
return *p;
}
Кроме того, у меня есть метод "массив" перегрузки доступа:
template <typename Type> LinkedList<Type>& LinkedList<Type>::operator [](const size_t index) const {
if(index < 0 || index >= length) // invaild argument
throw exception();
// continue
LinkedList<Type>* p = head;
for(size_t i = 0; i < index; ++i) p = p->next; // we are at what we want
return *p;
}
Все работает правильно - я проверил на dibugger,
проблема - + = не сохраняет новый узел в «head-> next», по какой-то причине после финиша + = метод, head-> next равно null.
Кто-нибудь знает, почему новое распределение не связано с head-> next?
Большое спасибо!
Если вы попытаетесь реализовать как стек, это будет намного проще. –
Связанные списки не лучше, чем векторы. Они на самом деле медленнее, и они не поддерживают произвольный доступ. По крайней мере, реализовать такой LL, который имеет постоянную вставку времени, а не O (n). –