我正在尝试从具有访问权限的链表中删除中间节点。我想知道下面两种方法之间是否有区别,或者它们完成相同的事情?
public boolean deleteMiddle(Node middle){
Node next = middle.next; //line 2
middle.data = next.data;
middle.next = next.next;
return true;
}
public boolean deleteMiddle(Node middle){
middle.data = middle.next.data;
middle.next = middle.next.next;
return true;
}
第一种方法是教科书推荐的方法,但是似乎在第一种方法(第2行)中创建节点“ next”是不必要的代码行。
[我认为您可能认为它们是等效的(或者看起来确实是这样)
[在两种情况下,如果您要删除的项目是列表中的最后一个(例如,如果next为null,则next.next都是错误),这似乎是null指针异常(在next.next上)。
当然,如果您通过null,那也将是NPE。
是的,它们是等效的。我喜欢第一个,因为它避免了表达式middle.next
的重复。
正如@Rick所指出的,当middle
是最后一个元素时,在两种情况下都将获得NPE。
在第一种方法(第2行)中创建节点“ next”是不必要的代码行。
两个片段都达到相同的结果。
但是额外的变量分配(它不会“创建节点”,它只是为现有名称分配一个新名称)的目的是避免两次调用middle.next
,避免两次进行相同的“计算”。
在此示例中,没有任何实际的区别,但是通常,通常可以进行性能优化,以避免多余的工作(尤其是如果涉及到的方法调用执行一些“繁重的工作”)。
最重要的是,给中间结果命名也可能导致更多不言自明的代码(这里也没有太大区别)。>>