我有以下方法:
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;
}
这非常有效,但当运行两次时,它只返回链表中的第一个(技术上是最后一个(节点,什么都没有,为什么会出现这种情况,你能帮我解决这个问题吗?谢谢
例如:反转前:10255.142.反转后:2.145.2510再次键入反转后:10
我认为这个方法是正确的。只要确保无论何时调用reverse((方法,都将reverse方法的结果分配给它的头。
head = reverse(head);//correct coz head changes after reversal
当您未能将reverse((方法的结果分配给head时。
reverse(head)//Wrong coz head won't change after reversal
头将不会被更新,它将只指向链表的尾部。希望这能有所帮助。
您的整个列表以head开头。一旦切换节点,head现在指向最后一个节点(即其.link为null(。
您需要将head重置为第一个节点,以便访问列表。