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。