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();
# 1 楼答案
你不可能
稍后在代码中—因为这将尝试声明一个与现有局部变量同名的新局部变量。(可以使用与实例字段或静态字段同名的局部变量,但不能同时在作用域中使用两个同名的局部变量。)相反,这一行:
为现有的局部变量指定一个新值
# 2 楼答案
第一次分配给
firstNode
是在定义它时:一旦定义了它,您就已经有了一个名为
firstNode
的变量,因此您不能重新定义它,只需为它分配一个新值-在本例中,新创建的Node
: