Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Listas Ligadas |
Como remover um nó no início de uma lista duplamente encadeada em Java - Escreva um programa Java que cria uma lista - Desafio de Programação Resolvido em JavaQuantidade de visualizações: 736 vezes |
Pergunta/Tarefa: Escreva um programa Java que cria uma lista dinâmica duplamente encadeada (lista duplamente ligada) e peça para o usuário inserir 5 elementos do tipo inteiro. Em seguida faça a remoção do nó no início da lista e retorne o seu valor. Sua saída deve ser parecida com: Inserindo valores na lista duplamente ligada: Informe o 1.o valor: 4 Informe o 2.o valor: 9 Informe o 3.o valor: 1 Informe o 4.o valor: 3 Informe o 5.o valor: 7 Valores na lista duplamente encadeada: 4 9 1 3 7 Removendo no início da lista O nó removido foi: 4 Valores na lista duplamente ligada novamente: 9 1 3 7 Na saída podemos ver que a lista contém os valores 4, 9, 1, 3 e 7. Depois que o nó no início é removido, os elementos da lista ficam 9, 1, 3 e 7. 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 para representar os nós da // lista duplamente encadeada class No { int valor; // valor armazenado no nó No anterior; // aponta para o nó anterior No proximo; // aponta para o próximo nó // construtor do nó public No(int valor){ this.valor = valor; this.anterior = null; this.proximo = null; } } public class Estudos { // referência para o início da lista duplamente ligada static No inicio; // referência para o final da lista duplamente ligada static No fim; 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 valores na lista duplamente ligada:\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 duplamente ligada System.out.print("\nValores na lista duplamente encadeada: "); exibirLista(); // vamos remover o nó no início da lista duplamente ligada System.out.println("\nRemovendo no início da lista"); No removido = removerInicio(); System.out.println("O nó removido foi: " + removido.valor); // vamos exibir os valores na lista duplamente ligada System.out.print("\nValores na lista duplamente ligada novamente: "); exibirLista(); } // esta função permite inserir um novo nó no // final de uma lista duplamente encadeada public static void inserirFinal(int valor) { // o primeiro passo é construir um novo nó No novo = new No(valor); novo.anterior = null; // não possui nó anterior novo.proximo = null; // não possui nó próximo // a lista ainda está vazia? if (inicio == null) { // tanto o início quanto o fim da lista // apontam para o novo nó inicio = novo; fim = novo; } else { // o campo anterior do novo nó aponta para o // final da lista novo.anterior = fim; // o campo proximo do final da lista aponta // para o novo nó fim.proximo = novo; // finalmente o fim da lista aponta para // o novo nó fim = novo; } } // função que permite remover o nó no início de uma lista // duplamente ligada em Java public static No removerInicio() { // primeiro apontamos para o início da lista No no = inicio; // a lista está vazia? if (no != null) { // o início da lista aponta para o seu próximo inicio = inicio.proximo; // é o último nó da lista? if (inicio != null) { inicio.anterior = null; } } // retorna o nó removido ou null no caso da lista vazia return no; } // esta função permite exibir os valores de todos // os nós da lista duplamente encadeada public static void exibirLista() { // apontamos para o início da lista No temp = inicio; // a lista está vazia? if (inicio == null) { System.out.println("A lista está vazia"); return; } // enquanto temp for diferente de null while(temp != null) { // mostramos o valor do nó atual System.out.print(temp.valor + " "); // e pulamos para o nó seguinte temp = temp.proximo; } } } |
![]() |
Java ::: Dicas & Truques ::: Data e Hora |
Como retornar a diferença de meses entre duas datas em Java - Datas e horas em JavaQuantidade de visualizações: 9233 vezes |
O trecho de código abaixo mostra como obter a diferença de meses entre dois objetos Date. Estude-o atentamente. Esta é uma técnica muito útil para programadores que lidam com cálculos de datas em suas aplicações:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; import java.util.*; import java.text.*; public class Estudos{ public static void main(String args[]){ try{ // constrói a primeira data DateFormat fm = new SimpleDateFormat( "dd/MM/yyyy"); Date data1 = (Date)fm.parse("20/10/2008"); // constrói a segunda data fm = new SimpleDateFormat("dd/MM/yyyy"); Date data2 = (Date)fm.parse("30/12/2008"); // vamos obter a diferença de meses long segundos = (data2.getTime() - data1.getTime()) / 1000; int meses = (int)Math.floor(segundos / 2592000); segundos -= meses * 2592000; int dias = (int)Math.floor(segundos / 86400); // exibe o resultado System.out.println("As duas datas tem " + meses + " meses e " + dias + " dias de diferença"); } catch(ParseException e){ e.printStackTrace(); } } } Ao executar este código Java nós teremos o seguinte resultado: As duas datas tem 2 meses e 11 dias de diferença |
Java ::: Coleções (Collections) ::: HashMap |
Java Collections - Como usar a classe HashMap da linguagem JavaQuantidade de visualizações: 37083 vezes |
A classe HashMap, do pacote java.util, é uma das principais implementações da interface Map. Além de fornecer todas as operações opcionais de um map, esta classe permite a inserção de chaves e valores com o valor null. Em realidade, a classe HashMap é bem similar à classe Hashtable, com a diferença que HashMap não é sincronizada (tenha cuidado ao usuá-la em ambiente de múltiplas threads) e permite valores e chaves null. Veja sua posição na hierarquia de classes Java: java.lang.Object java.util.AbstractMap<K,V> java.util.HashMap<K,V> O uso principal da classe HashMap é quando queremos associar chaves e valores e, posteriormente, recuperar valores baseados em suas chaves. Veja um exemplo no qual temos cidades e habitantes: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; import java.util.*; public class Estudos{ @SuppressWarnings("unchecked") public static void main(String[] args){ // cria uma nova instância de HashMap HashMap cidadesHabitantes = new HashMap(); // vamos adicionar algumas chaves e seus valores cidadesHabitantes.put("Goiânia", new Integer(4334598)); cidadesHabitantes.put("São Paulo", new Integer(49282768)); cidadesHabitantes.put("Brasília", new Integer(96736887)); // vamos obter uma view dos mapeamentos Set set = cidadesHabitantes.entrySet(); // obtemos um iterador Iterator i = set.iterator(); // e finalmente exibimos todas as chaves e seus valores while(i.hasNext()){ Map.Entry entrada = (Map.Entry)i.next(); System.out.println("Chave: " + entrada.getKey() + " - Valor: " + entrada.getValue()); } System.exit(0); } } Ao executar este código nós teremos o seguinte resultado: Chave: Goiânia - Valor: 4334598 Chave: Brasília - Valor: 96736887 Chave: São Paulo - Valor: 49282768 Uma observação importante em relação à classe HashMap é que esta não honra nenhuma ordem específica de seus elementos, ou seja, a ordem dos pares chave-valor em uma operação de exibição pode ser bem diferente da ordem de inserção. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arquivos e Diretórios |
Exercícios Resolvidos de Java - Um programa que recebe um caminho e nome de um arquivo e retorna apenas o caminho, sem o nome e extensão do arquivoQuantidade de visualizações: 7448 vezes |
Pergunta/Tarefa: Escreva um método Java que recebe um caminho e nome de arquivo na forma: "C:\temporario\Java\dica.txt" e retorne apenas o caminho do arquivo, sem o nome e extensão do arquivo. Assim, para o caminho acima, o retorno deve ser apenas: "C:\temporario\Java" Eis a assinatura do método a ser criado: public static String getCaminho(String caminho); Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.io.File; public class Main { public static void main(String[] args) { // define um caminho e nome de arquivo String caminho = "C:\\temporario\\Java\\dica.txt"; // vamos retornar apenas o caminho do arquivo, ou seja, retirar o // nome do arquivo String caminhoFinal = getCaminho(caminho); // vamos mostrar o resultado System.out.println("O caminho do arquivo é: " + caminhoFinal); } public static String getCaminho(String caminho){ // vamos obter o índice da última ocorrência do separador de caminho int pos = caminho.lastIndexOf(File.separatorChar); if (pos > -1) { return caminho.substring(0, pos); } // por padrão vamos retornar uma string vazia return ""; } } Uma variação deste exercício é a criação de um método que recebe o caminho e nome do arquivo e retorne apenas o nome do arquivo, seguido por sua extensão. |
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 |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |