if(temp->element > next->element && next!=NULL)
Нет смысла проверять, является ли next
значением NULL
после , вы разыменовали его: если оно было NULL
Вы уже мертвы.
Порядок имеет значение;next != NULL && temp->element > next->element
будет работать лучше.
У вас есть похожая ошибка в других местах программы, например,
next=temp->next;
cout<<"log: " << next->element; // will crash here if next==NULL