Q:

InsertSort de lista doble enlazada a lista simple

Tengo 2 listas (una simple y una doble), en la doble implemente el método de insertsort sin ningún problema y me gustaría implementar el mismo método de ordenamiento pero en la lista simple, el código es el siguiente.
Insertar al inicio:
void Listaven::insertaInicio(Vendedor dato) {
Nodo * tmp = new Nodo;
tmp->guardaObjeto(dato);
tmp->guardaNodoSig(NULL);
bool nada = vacia();

if (nada) {
    inicio = final = tmp;
}
else {
    tmp->sig = inicio;
    inicio->ant = tmp;
    tmp->ant = NULL;
    inicio = tmp;
}
ordenar();
int codigoVendedor = dato.damecodigoVendedor();
cout << "Has agregado un vendedor con el codigo: '" << codigoVendedor << "'" << endl;
}

Metodo de ordenamiento:
void Listaven::ordenar() {
Nodo *tmp = inicio;
Nodo *aux;
Vendedor recuperar;
while (tmp)
{
    recuperar = tmp->dato;
    aux = tmp;
    while (aux->ant != NULL && recuperar.damecodigoVendedor()<aux->ant->dato.damecodigoVendedor())
    {
        aux->dato = aux->ant->dato;
        aux = aux->ant;
    }
    aux->dato = recuperar;
    tmp = tmp->sig;
}
}

Así es como lo tengo para poder ordenarlo en la lista doblemente enlazada. Cual seria la forma para implementarlo en la lista simplemente enlazada, ya que por ende en la lista simple no hay parte ANT solo parte SIG.

A:

Depende del tipo de ordenación que quieras el algoritmo puede variar; podrías probar con un burbuja de toda la vida, que es más conocido por su sencillez que por su eficiencia.
Por ejemplo:
void ordenar()
{
    for (Nodo *head = inicio; head; head = head->sig)
    {
        for (Nodo *tail = head->sig; tail; tail = tail->sig)
        {
            if (head->dato.damecodigoVendedor() > tail->dato.damecodigoVendedor())
            {
                std::swap(head->dato, tail->dato);
            }
        }
    }
}

Puedes ver el código funcionando [aquí].
Evidentemente me he inventado el Vendedor y el Listaven, no se cuál es tu implementación.

