我们只是让前一个节点指向下一个节点。
prev.next = next;
return current;
或隔离节点
prev.next = next;
current.next = null;
return current;
仍然可以遍历剩余的列表,如果我们有删除的节点,则使用下一个指针。 在双重链接列表中怎么样?
答案 0 :(得分:1)
最重要的是,列表不变量在删除后保持不变。那是
列表不变量没有说明不属于列表的节点,因此在删除期间是否设置current.next = null
并不重要。
保留current.next
可能会阻碍自动垃圾收集,因为可能存在不再需要的对象引用。但这取决于具体情况。
在没有自动垃圾收集的语言中,存在拥有另一个对象的概念。 拥有另一个对象的对象负责管理该另一个对象的资源(例如,另一个对象占用的内存)。删除拥有对象时,拥有者必须删除拥有的对象。在这种情况下,如果您在删除current.next = null
之前未设置current
,则会删除不应删除的其他对象。
答案 1 :(得分:0)
没有真正的理由'隔离'节点。一旦将上一个节点的下一个指针设置为下一个节点,就可以“隔离”当前节点,因为无法从列表头找到它。假设您没有自动垃圾收集,则需要将其删除。
使用双向链表时,您还需要更新current.next的上一个指针。一旦你替换了指向旧的当前节点的所有节点指针,你就完成了从列表中拼接它并且它将不再可以找到。
在这个例子中,我们从单链和双链表中删除'b'节点。 括号中的箭头是需要更新的箭头。
[a] (->) [b] -> [c] would become [a] -> [c]
[a] <(->) [b] (<-)> [c] would become [a] <-> [c]