Videolivro 4 - listas encadeadas
8. Inserir elemento em uma posição específica
No exemplo anterior, nossa lista era formada pelos valores 1, 3, 5 e 7. Inserimos no final o número 2. Suponhamos que a ideia fosse inserir o número 2 entre o 1 e 3, ou seja, o novo elemento não seria inserido no início, nem no final, como já vimos antes, mas em uma posição específica, como mostra nosso desenho adaptado de Puga e Risseti (2016, p. 217):

Note que precisamos quebrar o vínculo entre o primeiro e segundo elemento (valores 1 e 3) para inserir outro no meio.
Desta vez, os parâmetros passam a ser não somente o valor a ser inserido, como também o número da posição.
Os números 1, 3, 5 e 7 estão nas posições 0, 1, 2 e 3 respectivamente.
|
|
Inserir em uma posição específica |
|---|---|
|
A inserção precisa considerar que a posição informada poderá ser 0, maior que o número de elementos, ou uma valor intermediário. Desta forma: 1) Número de nós = chamar a função contarNos
2) Em seguida:
se posição informada = 0
então chamar o procedimento para inserir no início [que já construímos]
senão se posição informada > Número de nós
então chamar o procedimento para inserir no final
senão percorrer a lista até a posição informada para inserir.
fimse;
fimse;
|
|
Vejamos então o algoritmo em Java, adaptado de Puga e Risseti (2016, p. 218-219):
Procedimento para inserir em uma determinada posição
public void inserirPosicao (NoSimples novoNo, int posicao) {
NoSimples noTemp = primeiro;
int posAuxiliar;
int numNos = contarNos();
if (posicao==0)
inserirInicio (novoNo);
else if (posicao>numNos)
inserirFinal (novoNo);
else {
posAuxiliar = 1;
while (posicao>posAuxiliar) {
noTemp = noTemp.proximo;
posAuxiliar++;
}
novoNo.proximo = noTemp.proximo;
noTemp.proximo = novoNo;
}
}
