Проблема в реализации добавления элемента в односвязный список
Проблема: После добавления элемента на определённую позицию, все следующие элементы затираются, при это сам элемент также не добавляется.
(прим: для ввода элементов вида 1 2 3 4 5 6, при попытке вставить элемент 5 на позицию 1, программа выдаст 1 -1)
Реализация односвязного списка:
struct Node{
int data;
Node *nextAddress;
};
class List{
private:
Node *headList;
Node *lastList;
public:
List(){
headList = nullptr;
lastList = nullptr;
}
Реализация метода добавления нового элемента на соответствующую позицию:
void addAfter(int x, int position){
Node *previous = this -> headList;
for (int i = 0; i < position - 1; i ++){
previous = previous -> nextAddress;
}
Node *newData = new Node;
newData -> data = x;
newData -> nextAddress = previous;
previous -> nextAddress = newData;
}
Ответы (2 шт):
Ну вот смотрите сами - в функции addAfter() вы нашли элемент в списке, после которого нужно вставить новый. Это указатель Node *previous.
Далее создали новый элемент на указатель Node *newData.
А дальше вы зацикливаете список на последние 2 элемента, т.к. продолжение списка вы указываете на предыдущий элемент
newData->nextAddress = previous; // продолжение списка вы зацикливаете на предыдущий элемент
previous->nextAddress = newData;
Должно быть
newData->nextAddress = previous->nextAddress;
previous->nextAddress = newData;
Так Вы же его "замкнули":
Node* newData = new Node;
newData->data = x;
newData->nextAddress = previous;
previous->nextAddress = newData;
У Вас следующий элемент за текущим это "предыдущий". Должно быть как-то так:
newData->nextAddress = previous->nextAddress;