![]() |
|
||||
Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Listas Ligadas |
Como remover em qualquer posição de uma lista ligada em Java - Escreva um programa Java que cria uma lista dinamicamente encadeada - Exercícios Resolvidos de JavaQuantidade de visualizações: 857 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 remova o nó presente 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: 9 Informe o 2.o valor: 2 Informe o 3.o valor: 4 Informe o 4.o valor: 6 Informe o 5.o valor: 1 Valores na lista: 9 -> 2 -> 4 -> 6 -> 1 -> null Removendo um elemento no índice k Informe o índice desejado: 3 O nó removido foi: 6 Valores na lista: 9 -> 2 -> 4 -> 1 -> null Na saída podemos ver que a lista ligada possui inicialmente os valores 9, 2, 4, 6 e 1. Em seguida o índice 3 é informado, o que indica que o quarto nó deve ser removido, já que os índices começam em 0. Depois da remoção do nó com o valor 6, os elementos da lista são 9, 2, 4 e 1. Veja a resolução comentada deste exercício usando Java: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
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 {
// vamos criar uma referência para o início da lista
static No inicio = null;
public static void main(String args[]){
// para ler a entrada do usuário
Scanner entrada = new Scanner(System.in);
// 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
inserirFinal(valor);
}
// vamos exibir os valores na lista ligada
System.out.print("\nValores na lista: ");
exibirLista();
// vamos remover o elemento no índice informado
System.out.println("\nRemovendo 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() - 1)) {
System.out.println("O índice é inválido.");
}
else {
// vamos remover o nó no índice indicado
No removido = removerIndice(indice);
System.out.println("O nó removido foi: " +
removido.valor);
// vamos exibir os valores na lista ligada
System.out.print("\nValores na lista: ");
exibirLista();
}
}
// função que permite remover um nó em uma determinada
// posição da lista ligada
// O índice deve variar entre 0 e o tamanho da lista - 1
public static No removerIndice(int indice) {
// para retornar o nó removido
No removido;
// a lista está vazia?
if(inicio == null){
return null;
}
// devemos remover no início?
else if(indice == 0){
// primeiro apontamos para o início da lista
removido = inicio;
// o início da lista aponta para o seu próximo
inicio = inicio.proximo;
// retornamos o nó removido
return removido;
}
// devemos remover em outra posição da lista
else {
// aponta para o início da lista
No temp = inicio;
// repetimos até encontrar a posição desejada
for (int i = 1; i < indice; i++){
// temp avança para o seu próximo nó
temp = temp.proximo;
}
// o proximo do nó atual aponta para o próximo do seu próximo
removido = temp.proximo;
temp.proximo = temp.proximo.proximo;
// retorna o nó removido
return removido;
}
}
// função que permite adicionar um nó no final da
// lista ligada
public static No inserirFinal(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() {
// 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() {
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 temp 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 |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






