Java中的链接列表引用

时间:2014-03-23 03:56:39

标签: java reference linked-list

如果我有一个ListNode类,那是

public class ListNode{
  int data;
  ListNode nextNode;
}

和List Class,即

public class List{
  private ListNode firstNode;
  private ListNode lastNode;
  private String name;

public List(String listName){
  name = listName;
  firstNode = lastNode = null; 
  }
}

最后一个语句“firstNode = lastNode = null”是什么意思? firstNode.data = null或firstNode.nextNode = null?

2 个答案:

答案 0 :(得分:4)

编辑:看来我回答错了问题。正如以下评论中提到的OP:

  

抱歉,我的问题可能不够清楚,我真正感到困惑的是,在执行“firstNode = null”时,还是firstNode.data = null或firstNode.nextNode = null,因为firstNode是ListNode类型的对象,具有int数据和listNode类型实例。

在作业firstNode = null之后,没有.data.nextNode。您必须先将firstNode分配给new ListNode()

完成此操作后,其data成员将初始化为0,其nextNode成员将初始化为null,因为这些是ListNode的默认初始值如果没有进行显式初始化,则成员字段。但同样,您需要首先实例化firstNode并将其分配给NullPointerException,否则如果您尝试在null时访问它,则会获得firstNode = lastNode = null


原始回答,重新:firstNode

它将lastNodenull分配给 a = b = 1 => a = (b = 1) (b = 1) assigns b then evaluates to 1 => a = 1

这是一种常用的句法技巧,它利用了赋值表达式作为一个整体在赋值后求值变量的事实:

    a = b = c = d = 1
=>  a = b = c = (d = 1)    (d = 1) assigns d then evaluates to 1
=>  a = b = (c = 1)        (c = 1) assigns c then evaluates to 1
=>  a = (b = 1)            (b = 1) assigns b then evaluates to 1
=>  a = 1

只要类型兼容,您就可以根据需要将多个链接在一起:

Integer x;
Double y;
x = y = null; // error: cannot convert from Double to Integer

不兼容的类型将导致错误:

int ch;
while ((ch = input.read()) != -1) {
   ...
}

这与您执行以下操作时使用的技巧相同:

{{1}}

来自JLS 15.26

  

在运行时,赋值表达式的结果是赋值发生后变量的值。

答案 1 :(得分:0)

这是"启动逻辑" for LinkedList当您实例化List类型的对象时,它最初为空,因此没有firstNode而没有lastNode,因此它们都是{{1} }}