我遇到了以下问题:
删除单链表中间的节点,只允许访问该节点。 (不给头) 现在有很多解决方案,当要删除的元素是最后一个节点时它们都不起作用。
为什么这不起作用?
public static void removeNode (Node n){
if(n.next == null){ //n is the last node
n= null;
return;
}
//handling general case here
}
答案 0 :(得分:6)
Java按值传递参数,因此将n设置为null在方法之外没有任何影响。这意味着该方法在传递列表的最后一个节点时基本上不执行任何操作。
答案 1 :(得分:2)
您需要在前一个节点中设置null引用,而不是引用最后一个节点的变量,如下所示:
if(n.next == null) {
prev.next = null;
return;
}
答案 2 :(得分:1)
n
是方法的本地,因此更改其值不会影响列表本身。您需要修改您无权访问的上一个节点的next
。