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 Java

Quantidade de visualizações: 781 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
Resposta/Solução:

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:

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


Link para compartilhar na Internet ou com seus amigos:

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

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 24 usuários muito felizes estudando em nosso site.