1

我遇到了以下问题:

删除单链表中间的节点,只允许访问该节点。(head没有给出)现在有很多解决方案,当要删除的元素是最后一个节点时,它们都不起作用。

为什么这行不通?

public static void removeNode (Node n){
    if(n.next == null){ //n is the last node
        n= null;
        return;
    }
    //handling general case here
}
4

3 回答 3

6

Java 通过值传递参数,因此将 n 设置为 null 在方法之外没有任何影响。这意味着当传递列表的最后一个节点时,该方法基本上什么都不做。

于 2013-07-16T13:02:28.020 回答
2

您需要将前一个节点中的引用设置为 null,而不是引用最后一个节点的变量,如下所示:

if(n.next == null) {
    prev.next = null;
    return;
}
于 2013-07-16T13:01:27.077 回答
1

n对方法来说是本地的,所以改变它的值不会影响列表本身。您需要修改next您无权访问的前一个节点的。

于 2013-07-16T13:04:06.027 回答