我正在通过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();

最佳答案

你不可能有

Node firstNode = new Node();

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

为现有的局部变量分配新的值。

10-08 06:39