Проблема в реализации добавления элемента в односвязный список

Проблема: После добавления элемента на определённую позицию, все следующие элементы затираются, при это сам элемент также не добавляется.

(прим: для ввода элементов вида 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 шт):

Автор решения: DmitryK

Ну вот смотрите сами - в функции addAfter() вы нашли элемент в списке, после которого нужно вставить новый. Это указатель Node *previous.
Далее создали новый элемент на указатель Node *newData.
А дальше вы зацикливаете список на последние 2 элемента, т.к. продолжение списка вы указываете на предыдущий элемент

newData->nextAddress = previous; // продолжение списка вы зацикливаете на предыдущий элемент
previous->nextAddress = newData;

Должно быть

newData->nextAddress = previous->nextAddress;
previous->nextAddress = newData;
→ Ссылка
Автор решения: isnullxbh

Так Вы же его "замкнули":

Node* newData = new Node;
newData->data = x;
newData->nextAddress = previous;
previous->nextAddress = newData;

У Вас следующий элемент за текущим это "предыдущий". Должно быть как-то так:

newData->nextAddress = previous->nextAddress;
→ Ссылка