¿Cómo se inserta en una lista enlazada ordenada? [duplicar]

Posible duplicado:
LinkedList "salto de nodo"

Solo necesito tener una lista enlazada en orden por nombre. Solo puedo llegar hasta los nodos 1, 3, 5, .. Simplemente no puedo pensar tan lejos. Quiero ser un programador de C ++, pero si no puedo entender, ¿esa es su esperanza? Contenedores STLstd::lists No son una opción para mí en este punto como estudiante. Lo que ve en la función de lista es lo que estoy tratando de comprender.

list::node::node(const winery &winery) : item( winery.getName(), winery.getLocation(),
    winery.getAcres(), winery.getRating() ), nextByName( NULL ), nextByRating( NULL )
{

}

void list::insert(const winery& winery)
{
    node *current_node  = new node( winery ); // but came here and did this so it has new info!
    node *next_node     = NULL;
    node *tail_node     = current_node;

    if ( headByName == NULL ) // then we are here for the first item
    {       
        headByName   = current_node; // the list ptrs will have the first node's address. 
        headByRating = current_node; 
    }
    while ( headByName->nextByName != NULL )
    {
        headByName->nextByName = tail_node;
        tail_node = next_node;
        //next_node = current_node;
    }
    tail_node = new node( winery ); 
    headByName->nextByName = tail_node;
}

Y los punteros que están disponibles para mí:

struct node
{
    winery  item;
    node *  nextByName;
    node *  nextByRating;
};

class list
{
    ...
private:
    node * headByName;
    node * headByRating;
};

Respuestas a la pregunta(4)

Su respuesta a la pregunta