ListNode head 值不会打印
ListNode head value won't print
所以我有一种方法可以将 ListNode 添加到现有的 ListNode 中,当 head != null 时它添加到末尾时它会起作用,但是一旦 head = null,它就会像 head 为 null 一样打印。通过 head.getValue(),我知道它增加了 head 的值,但它仍然打印出 head = null.
public static void add(ListNode <Integer> head, Integer value)
{
if (head == null)
{
head = new ListNode <Integer> (value, null);
head.setNext(null);
} else {
while (head.getNext() != null)
{
head = head.getNext();
}
head.setNext(new ListNode <Integer> (value, null));
}
}
public static void printLinkedList(ListNode <Integer> head)
{
if (head == null)
{
System.out.println();
return;
}
for(; head.getValue() != null; head = head.getNext())
{
System.out.print(head.getValue() + " ");
if(head.getNext() == null)
{
break;
}
}
System.out.println();
}
这看起来像是一个传递引用问题。简而言之,实例化一个新对象是传递引用不起作用的地方。
当您将对象引用传递给方法时,该方法会获取指向该对象的新指针。对对象的操作将影响对象的两个"versions",因为方法和全局指向同一个对象。
但是如果您在方法内部重新初始化该指针(使用 "new" 关键字),方法指针现在指向新对象,并且方法外部的原始指针不会更新。
要修复您的错误,您需要在 "add" 方法之外处理 "head is null" 案例。
Java is pass-by-value。因此,当您在 add 方法中为 head
创建一个新的对象引用时,在方法的末尾结束,
public static void add(ListNode <Integer> head, Integer value) {
if (head == null)
{
head = new ListNode <Integer> (value, null);//creates new reference
head.setNext(null);
} else {
while (head.getNext() != null)
{
head = head.getNext();
}
head.setNext(new ListNode <Integer> (value, null));
}
}
可能的解决方案是,在方法调用期间初始化 head
,
您的添加方法
public static void add(ListNode <Integer> head, Integer value) {
while (head.getNext() != null){
head = head.getNext();
}
head.setNext(new ListNode <Integer> (value, null));
}
并且在通话期间
if (head == null) {
head = new ListNode <Integer> (value, null);
head.setNext(null);
}
else add(head,value);
所以我有一种方法可以将 ListNode 添加到现有的 ListNode 中,当 head != null 时它添加到末尾时它会起作用,但是一旦 head = null,它就会像 head 为 null 一样打印。通过 head.getValue(),我知道它增加了 head 的值,但它仍然打印出 head = null.
public static void add(ListNode <Integer> head, Integer value)
{
if (head == null)
{
head = new ListNode <Integer> (value, null);
head.setNext(null);
} else {
while (head.getNext() != null)
{
head = head.getNext();
}
head.setNext(new ListNode <Integer> (value, null));
}
}
public static void printLinkedList(ListNode <Integer> head)
{
if (head == null)
{
System.out.println();
return;
}
for(; head.getValue() != null; head = head.getNext())
{
System.out.print(head.getValue() + " ");
if(head.getNext() == null)
{
break;
}
}
System.out.println();
}
这看起来像是一个传递引用问题。简而言之,实例化一个新对象是传递引用不起作用的地方。
当您将对象引用传递给方法时,该方法会获取指向该对象的新指针。对对象的操作将影响对象的两个"versions",因为方法和全局指向同一个对象。
但是如果您在方法内部重新初始化该指针(使用 "new" 关键字),方法指针现在指向新对象,并且方法外部的原始指针不会更新。
要修复您的错误,您需要在 "add" 方法之外处理 "head is null" 案例。
Java is pass-by-value。因此,当您在 add 方法中为 head
创建一个新的对象引用时,在方法的末尾结束,
public static void add(ListNode <Integer> head, Integer value) {
if (head == null)
{
head = new ListNode <Integer> (value, null);//creates new reference
head.setNext(null);
} else {
while (head.getNext() != null)
{
head = head.getNext();
}
head.setNext(new ListNode <Integer> (value, null));
}
}
可能的解决方案是,在方法调用期间初始化 head
,
您的添加方法
public static void add(ListNode <Integer> head, Integer value) {
while (head.getNext() != null){
head = head.getNext();
}
head.setNext(new ListNode <Integer> (value, null));
}
并且在通话期间
if (head == null) {
head = new ListNode <Integer> (value, null);
head.setNext(null);
}
else add(head,value);