dam*_*mon 1 java linked-list nodes
我正在尝试编写一个方法来删除链表中的最后一个节点(用于学习如何修改链表...我没有使用java库LinkedList类)..我试图处理传递的链表只有的用例一个节点.
但是,当我尝试在删除之前和之后打印链表时,它会提供与未删除节点相同的输出.
class NodeProcessing{
public static void removeLastNode(Node f){
if (f==null) return;
if(f.next == null){//if linkedlist has single node
f = null;
return;
}
...
}
public static void showList(Node first){
System.out.println("linked list=");
for(Node x = first; x != null; x = x.next){
System.out.print(x.item+" ,");
}
System.out.println();
}
public static void main(String[] args) {
Node a = new Node();
a.item = "one";
showList(a);
removeLastNode(a);
showList(a);
}
}
class Node{
String item;
Node next;
}
Run Code Online (Sandbox Code Playgroud)
输出:
链表=一,
链表=一,
更新:当我使用调试器时,我可以看到Node ain main()有地址:Node@a61164
而且Node f里面removeLastNode()也有:Node@a61164
设置f为null不执行任何操作 - 只更改参数的值,这只是一个局部变量.重要的是要理解Java总是使用值的传值 - 当参数类型是类类型时,值是引用,但该引用是按值传递的.将参数值更改为其他引用不会更改调用者的参数.
理想情况下,您希望将"列表"的概念与"列表中的节点"分开(就像Java API一样).当你调用这样remove一个对列表,发生变异的名单本身.在您当前的模型"节点只是列表的头部"中,您无法删除最终节点 - 您无法破坏节点本身.
你最接近的将是removeLastNode 返回一个Node引用 - null如果名义列表现在为空,则可以返回.