Entonces, por ejemplo, si en una lista con 2 elementos, donde la letra A es el primer elemento y la letra B es el segundo elemento, este método devolvería una nueva lista con los mismos elementos pero al revés, así que B primero y A segundo. Desafortunadamente, en este caso no funciona y en su lugar obtengo una excepción EmptyStackException. También dice que el valor de retorno del método nunca se usa, no estoy seguro de qué debe tener como declaración de retorno para que funcione. ¿Alguien puede decirme dónde está exactamente el error en mi código, o tal vez simplemente indicarme la dirección correcta? Gracias por adelantado !
Aquí está mi código:
public LinkedList<E> reverse() throws EmptyListException { Stack<LinkedNode<E>> stack = new Stack<>(); LinkedNode<E> temp = head; while(temp != null){ stack.push(temp); temp = temp.next; } temp = stack.peek(); head = temp; stack.pop(); while(!stack.isEmpty()){ temp.next = stack.peek(); stack.pop(); temp =temp.next; } temp.next = null; return stack.peek(); } public static void main(String[] args){ LinkedList<String> List = new LinkedList<>(); List.add("A"); List.add("B"); List.reverse(); -----------------ACTUALIZAR ---> Ok, agregué una segunda variable temporal, cambié la declaración de retorno y usé un método toString() en main para imprimirlo. Funciona bien incluso con más de 2 elementos, pero cuando paso el mouse en reversa (), el IDE todavía dice que el valor de retorno del método nunca se usa. Esto es lo que actualicé:
LinkedNode<E> temp2 = temp; while(!stack.isEmpty()){ temp.next = stack.peek(); stack.pop(); temp =temp.next; } temp.next = null; head = temp2; return temp2; public static void main(String[] args) { LinkedList<String> List = new LinkedList<>(); List.add("A"); List.add("B"); List.add("C"); List.add("D"); List.add("E"); List.add("F"); List.reverse(); System.out.println(List.toString()); }No debe devolver nada, y debe actualizar la temperatura al sacar el elemento de la pila. Algo como:
public void reverse() throws EmptyListException { if(head == null) throw new EmptyListException Stack<LinkedNode<E>> stack = new Stack<>(); LinkedNode<E> temp = head; while(temp != null){ stack.push(temp); temp = temp.next; } head = stack.peek(); while(!stack.isEmpty()){ temp = stack.peek(); stack.pop(); temp = temp.next; } temp.next = null; }Su IDE se queja porque:
List.reverse();no configuró el retorno del método inverso a nada, por ejemplo:
LinkedNode<E> tmp = List.reverse();Pero, de nuevo, no es necesario devolver nada.
No estoy seguro de por qué tiene todo ese código o está tratando de usar una pila. Parece que ya ha utilizado el método de la biblioteca reverse , así que ¿por qué no utilizarlo en lugar de reinventar la rueda?
LinkedList<String> list = new LinkedList<>(); list.add("A"); list.add("B"); Collections.reverse(list);¿O me estoy perdiendo el punto?