Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Listas Ligadas |
Como inserir um nó em qualquer posição de uma lista ligada em Java - Escreva um programa Java que cria uma lista dinamicamente encadeada - Desafio de Programação Resolvido em JavaQuantidade de visualizações: 708 vezes |
Pergunta/Tarefa: Escreva um programa Java que cria uma lista dinamicamente encadeada (lista singularmente encadeada) e pede para o usuário inserir 5 elementos do tipo inteiro. Em seguida peça para o usuário informar um índice e um novo elemento e insira tal elemento no índice informado. Faça a validação dos índices para que ele não saia da faixa permitida. Sua saída deve ser parecida com: Inserindo 5 valores na lista Informe o 1.o valor: 8 Informe o 2.o valor: 2 Informe o 3.o valor: 4 Informe o 4.o valor: 7 Informe o 5.o valor: 3 Valores na lista: 8 -> 2 -> 4 -> 7 -> 3 -> null Inserindo um elemento no índice k Informe o índice desejado: 2 Informe o valor do nó: 9 Valores na lista: 8 -> 2 -> 9 -> 4 -> 7 -> 3 -> null Na saída podemos ver que o índice 2 corresponde ao terceiro elemento da lista ligada. Por isso o valor 4 foi empurrado para a frente para abrir espaço para o valor 9. Se o índice 0 fosse informado, o número 8 seria empurrado para a frente e o nó com valor 9 passaria a ser o início da lista ligada. Veja a resolução comentada deste exercício usando Java: ---------------------------------------------------------------------- Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) Este código foi útil? Paga um cafezinho pra mim :-( PIX: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.Scanner; // classe interna usada para representar um // nó na lista ligada class No { int valor; // valor do nó No proximo; // aponta para o novo nó // construtor cheio da classe No public No(int valor, No proximo) { this.valor = valor; this.proximo = proximo; } // construtor vazio da classe No public No() { this.valor = 0; this.proximo = null; } } public class Estudos { public static void main(String args[]){ // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // vamos criar uma referência para o início da lista No inicio = null; // vamos inserir 5 valores inteiros na lista ligada int valor; System.out.println("Inserindo 5 valores na lista\n"); for (int i = 0; i < 5; i++) { System.out.print("Informe o " + (i + 1) + ".o valor: "); valor = Integer.parseInt(entrada.nextLine()); // vamos inserir este valor no final da lista inicio = inserirFinal(inicio, valor); } // vamos exibir os valores na lista ligada System.out.print("\nValores na lista: "); exibirLista(inicio); // vamos inserir um novo elemento no índice informado System.out.println("\nInserindo um elemento no índice k\n"); System.out.print("Informe o índice desejado: "); int indice = Integer.parseInt(entrada.nextLine()); // o índice é válido? if ((indice < 0) || (indice > tamanhoLista(inicio) - 1)) { System.out.println("O índice é inválido."); } else { // vamos inserir o novo nó no índice indicado System.out.print("Informe o valor do nó: "); valor = Integer.parseInt(entrada.nextLine()); inicio = inserirIndice(inicio, indice, valor); // vamos exibir os valores na lista ligada System.out.print("\nValores na lista: "); exibirLista(inicio); } } // função que permite adicionar um nó em uma determinada // posição da lista ligada public static No inserirIndice(No inicio, int indice, int valor) { // vamos apontar para o nó inicial No atual = inicio; // criamos um novo nó No novo = criarNo(valor); // a lista ligada ainda está vazia? if (atual == null){ // inicio recebe o novo nó inicio = novo; } else if (indice == 0) { // o índice é igual a 0? vamos inserir // o nó no início da lista ligada novo.proximo = inicio; inicio = novo; } else { // vamos procurar o local adequado para inserção // primeiro criamos um nó temporário No temp = new No(); // apontamos o nó temporário para o início da lista temp = inicio; // e percorremos os nós até encontrar a posição // de inserção for(int i = 1; i < indice; i++) { if (temp != null) { // passa para o próximo nó temp = temp.proximo; } } // concluimos a inserção novo.proximo = temp.proximo; temp.proximo = novo; } // e retornamos o início da lista return inicio; } // função que permite adicionar um nó no final da // lista ligada public static No inserirFinal(No inicio, int valor) { // vamos apontar para o nó inicial No atual = inicio; // criamos um novo nó No novo = criarNo(valor); // a lista ligada ainda está vazia? if (atual == null){ // inicio recebe o novo nó inicio = novo; } else { // temos um ou mais nós na lista ligada // vamos localizar o último nó while (atual.proximo != null) { atual = atual.proximo; } // encontramos o último nó. Agora vamos inserir // o novo nó depois dele atual.proximo = novo; } // e retornamos o início da lista return inicio; } // função usada para construir e retornar um novo nó public static No criarNo(int valor) { // cria o novo nó No no = new No(valor, null); // retorna o nó criado return no; } // função usada para percorrer a lista ligada e // exibir os valores contidos em seus nós public static void exibirLista(No inicio) { // vamos apontar para o início da lista No temp = inicio; // a lista está vazia? if (temp == null) { System.out.println("A lista está vazia."); } else { // esse laço se repete enquanto tempo for // diferente de null while (temp != null) { // vamos mostrar o valor desse nó System.out.print(temp.valor + " -> "); // avança para o próximo nó temp = temp.proximo; } // mostra o final da lista System.out.println("null"); } } // função que retorna a quantidade de nós na lista ligada public static int tamanhoLista(No inicio) { int tamanho = 0; // vamos apontar para o início da lista No temp = inicio; // a lista está vazia? if (temp == null) { return 0; } else { // esse laço se repete enquanto tempo for // diferente de null while (temp != null) { // vamos incrementar o tamanho tamanho++; // avança para o próximo nó temp = temp.proximo; } } return tamanho; } } |
![]() |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Python - Como converter Metros Quadrados em Quilômetros Quadrados em Python - Python para Física e Engenharia |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |