有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中向列表开头添加节点的算法?

我正在通过Sedgewick的算法学习链表基础知识,并在链表的开头添加了节点。我注意到他们正在使用下面的代码重新定义“第一个节点”:

Node firstNode = new Node();
Node secondNode = new Node();
Node thirdNode = new Node();

//create 3 initial nodes
firstNode.item = "to";
secondNode.item = "be";
thirdNode.item = "or";

//set order of nodes
firstNode.next = secondNode;
secondNode.next = thirdNode;

//add new node to beginning
Node oldFirstNode = firstNode;

//recreate first node
firstNode = new Node();

firstNode.item = "not";
firstNode.next = oldFirstNode;

我们为什么不做:Node firstNode = new Node();? 不明白为什么它是firstNode = new Node();


共 (2) 个答案

  1. # 1 楼答案

    你不可能

    Node firstNode = new Node();
    

    稍后在代码中—因为这将尝试声明一个与现有局部变量同名的新局部变量。(可以使用与实例字段或静态字段同名的局部变量,但不能同时在作用域中使用两个同名的局部变量。)相反,这一行:

    firstNode = new Node();
    

    为现有的局部变量指定一个新值

  2. # 2 楼答案

    第一次分配给firstNode是在定义它时:

    Node firstNode = new Node();
    

    一旦定义了它,您就已经有了一个名为firstNode的变量,因此您不能重新定义它,只需为它分配一个新值-在本例中,新创建的Node

    firstNode = new Node();