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):

inserirposicaoespecifica

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.

dicaazul

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