为了账号安全,请及时绑定邮箱和手机立即绑定

ListNode 头值不会打印

ListNode 头值不会打印

偶然的你 2021-10-06 10:14:19
所以我有一种方法可以将 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();   }
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

Java 是按值传递的。因此,当您为headadd 方法的内部创建一个新的对象引用时,它会在方法结束时结束,


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


查看完整回答
反对 回复 2021-10-06
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

这看起来像一个传递引用问题。简而言之,实例化一个新对象是传递引用不起作用的地方。

当您将对象引用传递给方法时,该方法正在获取指向该对象的新指针。对象上的操作将影响对象的两个“版本”,因为方法和全局指向同一个对象。

但是,如果您在方法内部重新初始化该指针(使用“new”关键字),则该方法的指针现在指向新对象,并且该方法外部的原始指针不会更新。

要修复您的错误,您需要在“add”方法之外处理“head is null”的情况。


查看完整回答
反对 回复 2021-10-06
  • 2 回答
  • 0 关注
  • 239 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信