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; } }