一种方法,它使用Java中的堆栈返回一个新的重新排序的单链表,保留相同的元素,但按相反的顺序打印出来

一种方法,它使用Java中的堆栈返回一个新的重新排序的单链表,保留相同的元素,但按相反的顺序打印出来,java,stack,reverse,singly-linked-list,Java,Stack,Reverse,Singly Linked List,例如,如果在一个包含2个元素的列表中,字母a是第一个元素,字母B是第二个元素,那么这个方法将返回一个包含相同元素但反向的新列表,因此字母B是第一个和第二个。不幸的是,在这种情况下它不起作用,我得到了一个EmptyStackException。它还说,该方法的返回值从未被使用过,不确定使用什么作为它的返回语句。有人能告诉我代码中的错误到底在哪里,或者可能只是给我指出了正确的方向。提前谢谢 这是我的密码: public LinkedList<E> reverse() throws E

例如,如果在一个包含2个元素的列表中,字母a是第一个元素,字母B是第二个元素,那么这个方法将返回一个包含相同元素但反向的新列表,因此字母B是第一个和第二个。不幸的是,在这种情况下它不起作用,我得到了一个EmptyStackException。它还说,该方法的返回值从未被使用过,不确定使用什么作为它的返回语句。有人能告诉我代码中的错误到底在哪里,或者可能只是给我指出了正确的方向。提前谢谢

这是我的密码:

  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();
-----------------
public LinkedList reverse()抛出EmptyListException{
堆栈=新堆栈();
链接节点温度=头;
while(temp!=null){
堆栈推送(温度);
温度=下一个温度;
}
temp=stack.peek();
压头=温度;
stack.pop();
而(!stack.isEmpty()){
temp.next=stack.peek();
stack.pop();
温度=下一个温度;
}
temp.next=null;
返回stack.peek();
}
公共静态void main(字符串[]args){
LinkedList=新建LinkedList();
列表。添加(“A”);
列表。添加(“B”);
List.reverse();
-----------------
更新---> 好的,我添加了第二个临时变量,更改了return语句,并在main中使用了一个toString()方法将其打印出来。即使有2个以上的元素,它也可以正常工作,但当我将鼠标悬停在reverse()上时,IDE仍然说该方法的返回值从未使用过?! 以下是我更新的内容:

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());
}
LinkedNode temp2=temp;
而(!stack.isEmpty()){
temp.next=stack.peek();
stack.pop();
温度=下一个温度;
}
temp.next=null;
头部=temp2;
返回temp2;
公共静态void main(字符串[]args){
LinkedList=新建LinkedList();
列表。添加(“A”);
列表。添加(“B”);
列表。添加(“C”);
列表。添加(“D”);
列表。添加(“E”);
列表。添加(“F”);
List.reverse();
System.out.println(List.toString());
}

不确定您为什么拥有所有这些代码或试图使用堆栈。您似乎已经使用了
反向
库方法,那么为什么不使用它而不是重新发明轮子呢

LinkedList=新建LinkedList();
列表。添加(“A”);
列表。添加(“B”);
收款。反向(列表);

还是我没有抓住要点?

您不应该返回任何内容,并且应该在从堆栈中弹出元素时更新temp。类似于:

 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;
}
您没有将reverse方法的返回设置为任何值,例如:

LinkedNode<E> tmp = List.reverse();
LinkedNodeTMP=List.reverse();
但同样,你不需要归还任何东西

LinkedNode<E> tmp = List.reverse();