Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的反向链接列表方法不能多次工作?_Java_Linked List - Fatal编程技术网

Java 为什么我的反向链接列表方法不能多次工作?

Java 为什么我的反向链接列表方法不能多次工作?,java,linked-list,Java,Linked List,我有以下方法: public static IntNode reverse (IntNode head) { IntNode prev = null; IntNode curr = head; IntNode next = null; while(curr!=null) { next = curr.link; curr.link

我有以下方法:

    public static IntNode reverse (IntNode head) {
            IntNode prev = null;
            IntNode curr = head;
            IntNode next = null;
            while(curr!=null) {
                next = curr.link;
                curr.link = prev;
                prev = curr;
                curr = next;
            }
            return prev;
        }
这工作得很好,但当运行两次时,它只返回链表中的第一个(技术上是最后一个)节点,其他什么都没有,为什么会出现这种情况,您能帮我解决这个问题吗?谢谢

例如: 反转前: 10 25 5. 14 2. 反转后: 2. 14 5. 25 10 再次键入Reversion后:
10

您的整个列表都是以head开头的。切换节点后,head现在指向最后一个节点(即其链接为空)


您需要将head重置为第一个节点,以便访问列表。

我认为该方法是正确的。只要确保在调用reverse()方法时,将reverse()方法的结果分配给其head即可

head = reverse(head);//correct coz head changes after reversal
当无法将reverse()方法的结果分配给head时

reverse(head)//Wrong coz head won't change after reversal

head不会被更新,它将只指向链表的尾部。希望这有帮助。

最好的方法是什么?如果您的反向方法可以直接访问head,则在while循环集
head=prev
之后。或者,我看到您正在返回prev,如果调用reverse方法的地方有权访问head,那么您可以在那里设置它。我使用第二个类来调用此方法,因为它是静态的,看起来是这样的:System.out.println(IntNode.reverse(head)),其中head是我创建的int节点:IntNode head=new IntNode();在IntNode类中使用无参数构造函数的。在这种情况下,我不知道如何设置head=prev。我不明白,reverse方法在哪个类中?head保存在哪个类中?哪个类在调用反向方法?反向方法在IntNode类中,调用它的方法在IntNodeTest中。方法中使用了参数head,但IntNodeTest中使用了名为head的IntNode。