我正在通过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();
。
答案 0 :(得分:3)
你无法
Node firstNode = new Node();
稍后在代码中 - 因为那将尝试声明一个与现有变量同名的新局部变量。 (您可以拥有一个与实例字段或静态字段同名的局部变量,但是您不能同时在范围内有两个同名的局部变量。)相反,这一行:
firstNode = new Node();
为现有本地变量指定一个新值。
答案 1 :(得分:1)
第一次分配给firstNode
时,您需要定义它:
Node firstNode = new Node();
一旦定义了,你就已经有了一个名为firstNode
的变量,所以你不能重新定义它,只需为它分配一个新值 - 在这种情况下,是一个新创建的{{ 1}}:
Node