我使用selectionSort进行排序,并且在selectionSort中有一个交换函数,但是,swap中的head的值在外部是不一样的(在selectionSort的调用函数之后),谢谢你的回复。 / p>
public Node selectionSort(Node head){
if(head == null)
return head;
Node min = head;
Node beforeMin = null;
Node ptr;
for (ptr = head;ptr.next!=null;ptr = ptr.next)
{
if(ptr.next.value < min.value)
{
min = ptr.next;
beforeMin = ptr;
}
}
if(min != head)
{swapNodes(head, head, min, beforeMin);}
head.next = selectionSort(head.next);
return head;
}
public void swapNodes(Node head, Node currX, Node currY, Node prevY)
{
// make 'currY' as new head
head = currY;
// adjust links
prevY.next = currX;
// Swap next pointers
Node temp = currY.next;
currY.next = currX.next;
currX.next = temp;
}
}
强文
答案 0 :(得分:0)
正如您已经确定的那样,在Java中,您无法将函数传递给函数,以便函数可以修改引用本身。 head
中的selectionSort
是对象的引用。将head
传递到swapNodes
后,它会传入对象的引用,而不是head
中对selectionSort
的引用。因此,当您在head
中为swapNodes
分配内容时,您不会更改head
中的selectionSort
。
处理此问题的两种方法:
选项1:使head
成为类的属性(成员),而不是swapNodes
的参数。然后可以从两种方法访问head
变量本身。
public class YourClass {
private Node head;
public Node selectionSort { . . . }
public void swapNodes { . . . }
}
选项2:创建一个包含head
作为成员的对象,并在任何地方使用该对象,包括将其作为参数传递。
在像你这样的情况下,选项1是显而易见的选择。