Я думаю, что проблема заключается в вставке в начало списка, и у вас есть только один элемент, while (input > newnode -> name && newnode -> next != last -> next)
может выйти по двум причинам, и вы предполагаете, что если указатель все еще находится в заголовке, у вас естьвставить его потом, но, возможно, он просто вышел из строя, потому что был только один элемент, и вам нужно вставить новый перед головой.
Так что вам, вероятно, нужно сделать что-то вроде:
if (newnode->next == head->next) {
// Create the node and set the common values for all the cases
node* name = new node;
name->name = input;
if (input > newnode->name) { // Insert as second element
name->prev = newnode;
name->next = NULL;
newnode->prev = NULL;
newnodw->next = name;
head = newnode;
last = name;
}
else { // Insert as first element
name->prev = NULL;
name->next = newnode;
newnode->prev = name;
newnodw->next = NULL;
head = name;
last = newnode;
}