ListNode 头值不会打印

所以我有一种方法可以将 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();

   }


偶然的你
浏览 240回答 2
2回答

森林海

Java 是按值传递的。因此,当您为headadd 方法的内部创建一个新的对象引用时,它会在方法结束时结束,public static void add(ListNode <Integer> head, Integer value) {&nbsp; if (head == null)&nbsp; {&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;head = new ListNode <Integer> (value, null);//creates new reference&nbsp; &nbsp; &nbsp;head.setNext(null);&nbsp; } else {&nbsp; &nbsp; &nbsp;while (head.getNext() != null)&nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; head = head.getNext();&nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp;head.setNext(new ListNode <Integer> (value, null));&nbsp; }}可能的解决方案是,head在方法调用本身期间初始化您的添加方法public static void add(ListNode <Integer> head, Integer value) {&nbsp; &nbsp; while (head.getNext() != null){&nbsp; &nbsp; &nbsp; &nbsp; head = head.getNext();&nbsp; &nbsp; }&nbsp; &nbsp; head.setNext(new ListNode <Integer> (value, null));}在您通话期间if (head == null) {&nbsp;&nbsp;&nbsp;head = new ListNode <Integer> (value, null);&nbsp;head.setNext(null);}else add(head,value);

海绵宝宝撒

这看起来像一个传递引用问题。简而言之,实例化一个新对象是传递引用不起作用的地方。当您将对象引用传递给方法时,该方法正在获取指向该对象的新指针。对象上的操作将影响对象的两个“版本”,因为方法和全局指向同一个对象。但是,如果您在方法内部重新初始化该指针(使用“new”关键字),则该方法的指针现在指向新对象,并且该方法外部的原始指针不会更新。要修复您的错误,您需要在“add”方法之外处理“head is null”的情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java