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);