这段代码真正做的是将下一个节点复制到给定节点.净效果就好像当前节点被删除一样,但实际上它只是被下一个节点覆盖了.
也就是说,你要删除此列表中的B:
A -> B -> C -> D
结果列表如下所示:
+------+
A -> B(Ccopy) ---+ C -+-> D
现在,您无法对节点D执行此操作,因为没有要复制的下一个节点.
Why couldn’t I just,say,put a check in the method before the body to check if n.next was equal to null,and if so,just set n to be null and return true? Is there any reason I can’t just do that?
将n设置为null将不会执行任何操作. n只是对要删除的列表节点的引用.如果更改n,则实际上不会更改列表中的任何内容.例如,假设您要在同一列表中删除D.它看起来像这样:
n
|
v
A -> B -> C -> D
如果将n设置为null,则最终结果如下:
n---> null
A -> B -> C -> D
请注意,列表中没有任何内容发生变化.
在这种情况下删除D的唯一方法是修改C.next指向null.也就是说,你想要这个:
+----> null
A -> B -> C --+ D
这需要修改C,但是在单链表中,你没有简单的方法从D访问C.你必须从列表的开头搜索,直到找到节点x,使x.next == D.