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