Alguém me explica o algoritimo de inserir valor em uma lista encadeada?

Bom estou estudando AED agora e me apareceu uma grande duvida em Listas, é o seguinte eu não consigo entender como funciona para inserir valores em uma lista…

Eu estou usando o seguinte Algoritimo para inserir valores só que sem entender:

if (ListaVazia() ){ // primeiro = ultimo = n; } else{ n.prox = primeiro; primeiro = n; } totalNos++; }

bom oque eu faço é o seguinte:

1 - testo a lista, se ela estiver vazia, o primeiro e o ultimo recebe o n.

2 - senão n.prox recebe o primeiro;
primeiro recebe o n; // [color=green]aqui está a duvida!! porque n.prox recebr o primeiro e dps o primeiro recebe n? [/color]

O segredo é que esse código está inserindo no início da lista.

Vou tentar mostrar como está a lista antes e depois, veja se dá para entender o que aconteceu
(não consegui pensar em uma forma de representar então seja paciente :slight_smile: )
No lado esquerdo estão os ponteiros, no lado direito os objetos nós.

Antes:

primeiro ------ aponta para -----> NO1
NO1.prox ------ aponta para -----> NO2
NO2.prox ------ aponta para -----> NO3

Depois:

primeiro ------ aponta para -----> NOVO_NÓ    //primeiro aponta para o novo nó
NOVO_NÓ.prox -- aponta para -----> NO1        //n.prox aponta para o que era antes o primeiro nó
NO1.prox ------ aponta para -----> NO2
NO2.prox ------ aponta para -----> NO3

Acho que complementando o que o gomesrod disse, vc deve estar estudando uma estrutura de pilha de dados(Last in First Out), então todo elemento novo que vc incluir será o primeiro dessa pilha e assim sucessivamente, por isso vc atribui ao ultimo o valor do primeiro item a ser inserido.
Acredito que se fosse uma fila de estrutura de dados, o seu último sempre seria o último elemento que vc inseriu na estrutura.