我可以理解第2-8行,遍历并重新分配节点的指针,但我不知道为什么temp.next和temp.prev被设置为null。是要删除临时节点吗?
答案 0 :(得分:0)
以下是删除
之前链表的表示------- ------- -------
|node1| <=> | node2 | <=> | node3 |
------- ------- -------
执行后(删除node2)
temp.next.prev = temp.prev;
temp.prev.next = temp.next;
------- ------- -------
|node1| <- | node2 | -> | node3 |
------- ------- -------
^ | ^ |
| |_____________________| |
|_________________________|
node2
仍有两个活动指针并不重要,最终将由垃圾收集器收集,因此不需要将其next
和prev
设置为null。
注意:您的代码不适用于删除头部或尾部节点(因为它们的prev和next分别为null)。
您可以在上述两个陈述之前添加if
支票(temp.next != null
和temp.prev != null
)。
或者您可以在开头和结尾添加一个标记虚拟节点,这将简化您的代码并避免需要这样的if
条件。
答案 1 :(得分:0)