В вашей функции-члене update
вы изменяете указатель на новый узел с именем start_ptr
, который не указывает ни на что в вашем списке. Вы должны просто использовать Node *current = start_ptr;
Также нет смысла делать переменные current
или temp
в вашем классе узлов.
Это все, что вам нужно для узла и списка:
class Node {
public:
Node() : data(0), prev(nullptr), next(nullptr) {}
Node(int newData, Node *newPrev, Node *newNext)
: data(newData), prev(newPrev), next(newNext) {}
int getData() const { return data; }
Node *getPrev() const { return prev; }
Node *getNext() const { return next; }
void setData(const int& newData) { data = newData; }
void setPrev(Node *newPrev) { prev = newPrev; }
void setNext(Node *newNext) { next = newNext; }
~Node() {}
private:
int data;
Node *prev;
Node *next;
};
class DoublyList {
public:
DoublyList();
~DoublyList();
void destroyList();
private:
Node *first; // pointer to the first node on the list
Node *last; // pointer to the last node on the list
int count; // number of nodes in the list
};
Также эти строки:
current = start_ptr;
while((current!=NULL) && (current->temp->age!=updateAge))
{
current=current->next;
}
if (current==NULL)
{cout<<"The Requested age is Not Found" << endl;}
Вы устанавливаете current
в next
в цикле while, так что в конечном итоге текущий станет nullptr
, поэтому оператор if
будет оценен как true, что приведет к выводу «Запрошенный возраст не найден» .
Еще одна вещь: не используйте NULL
, вместо этого используйте nullptr
.