fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. class No<T> {
  8.  
  9. T elemento;
  10. No<T> proximo;
  11. No<T> anterior;
  12.  
  13. public No(T elemento, No<T> anterior, No<T> proximo) {
  14. this.elemento = elemento;
  15. this.proximo = proximo;
  16. this.anterior = anterior;
  17. }
  18.  
  19. public No(T elemento) {
  20. this.elemento = elemento;
  21. proximo = null;
  22. anterior = null;
  23. }
  24.  
  25. @Override
  26. public String toString() {
  27. return elemento.toString();
  28. }
  29. }
  30.  
  31. class Lista<T> {
  32.  
  33. private No<T> primeiro;
  34. private int tamanho;
  35.  
  36. public void adicionar(T item){
  37. No<T> novo = new No<T>(item);
  38.  
  39. if (primeiro == null){
  40. primeiro = novo;
  41. return;
  42. }
  43.  
  44. No<T> curr = primeiro;
  45.  
  46. while (curr.proximo != null){
  47. curr = curr.proximo;
  48. }
  49.  
  50. curr.proximo = novo;
  51. novo.anterior = curr;
  52. }
  53.  
  54. public boolean remover(T item) {
  55. if (primeiro.elemento.equals(item)) {
  56. primeiro = primeiro.proximo;
  57. if (primeiro != null){
  58. primeiro.anterior = null;
  59. }
  60. return true;
  61. }
  62.  
  63. No<T> n = primeiro;
  64. T aux1 = null;
  65. T aux2 = null;
  66.  
  67. while (n.proximo != null) {
  68. if (item.equals(n.proximo.elemento)) {
  69. aux1 = n.proximo.elemento;
  70. n.proximo = n.proximo.proximo;
  71. break;
  72. }
  73.  
  74. n = n.proximo;
  75. }
  76.  
  77. //n = n.proximo;
  78.  
  79. while (n.anterior != null) {
  80. if (item.equals(n.anterior.elemento)) {
  81. aux2 = n.anterior.elemento;
  82. n.anterior = n.anterior.anterior;
  83. break;
  84. }
  85.  
  86. n = n.anterior;
  87. }
  88.  
  89. if (aux1 == aux2) {
  90. tamanho--;
  91. return true;
  92. }
  93.  
  94. return false;
  95.  
  96. }
  97.  
  98. public void mostrar(){
  99. No<T> curr = primeiro;
  100.  
  101. while (curr != null){
  102. System.out.print(curr.toString() + " -> ");
  103. curr = curr.proximo;
  104. }
  105.  
  106. System.out.println("NULL");
  107. }
  108. }
  109.  
  110. /* Name of the class has to be "Main" only if the class is public. */
  111. class Ideone
  112. {
  113. public static void main (String[] args) throws java.lang.Exception
  114. {
  115. Lista<Integer> lista = new Lista<>();
  116.  
  117. lista.adicionar(5);
  118. lista.adicionar(15);
  119. lista.adicionar(2);
  120. lista.adicionar(9);
  121.  
  122. lista.mostrar();
  123.  
  124. lista.adicionar(23);
  125. lista.adicionar(4);
  126. lista.adicionar(18);
  127.  
  128. lista.mostrar();
  129.  
  130. lista.remover(15);
  131.  
  132. System.out.println("Depois de remover o 15");
  133. lista.mostrar();
  134. lista.remover(18);
  135. System.out.println("Depois de remover o 18");
  136. lista.mostrar();
  137. lista.remover(5);
  138. System.out.println("Depois de remover o 5");
  139. lista.mostrar();
  140. lista.remover(2);
  141. lista.remover(9);
  142. lista.remover(23);
  143. lista.remover(4);
  144. System.out.println("Depois de remover todos");
  145. lista.mostrar();
  146. }
  147. }
Success #stdin #stdout 0.08s 27840KB
stdin
Standard input is empty
stdout
5 -> 15 -> 2 -> 9 -> NULL
5 -> 15 -> 2 -> 9 -> 23 -> 4 -> 18 -> NULL
Depois de remover o 15
5 -> 2 -> 9 -> 23 -> 4 -> 18 -> NULL
Depois de remover o 18
5 -> 2 -> 9 -> 23 -> 4 -> NULL
Depois de remover o 5
2 -> 9 -> 23 -> 4 -> NULL
Depois de remover todos
NULL