在一些编程场景中,我们常常需要记录下某一个特殊的实例位置(如BST转双向链表题中需要记录最终生成的链表的头节点)。
在使用Java编程过程中,需要注意引用的问题。
class ListNode {
public int val;
public ListNode next;
public ListNode(int _val) {
val = _val;
}
}
public class PointerTestInJava {
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = null;
pointerTest(node1, node2);
if (node2 == null) {
System.out.println("node2 is still null!");
} else {
System.out.println(node2.val);
}
}
public static void pointerTest(ListNode node1, ListNode node2) {
node2 = node1;
}
}
打印结果如下:
node2 is still null!
显然pointerTest方法并不能将node1指向node2,作如下的改变:
public class PointerTestInJava {
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
pointerTest(node1, node2);
if (node2.next == null) {
System.out.println("node2.left is null!");
} else {
System.out.println("node2.next is " + node2.next.val);
}
}
public static void pointerTest(ListNode node1, ListNode node2) {
node2.next = node1;
}
}
打印结果:
node2.next is 1
此时,node1.left指向了node2. 原因是可把node1.left看做是一个指针。