一个问题要求您删除链表中的中间节点,仅给出该节点。解决问题的方法是复制middle.next.element
到middle.element
然后middle.next
删除middle.next=middle.next.next
有一种特殊情况,即 middle.next 是最后一个节点。答案说您可以将中间节点标记为虚拟节点。
我不熟悉“虚拟”的想法。如何将节点标记为虚拟节点以及在其他情况下如何使用虚拟节点?
一般的虚拟数据呢?
一个问题要求您删除链表中的中间节点,仅给出该节点。解决问题的方法是复制middle.next.element
到middle.element
然后middle.next
删除middle.next=middle.next.next
有一种特殊情况,即 middle.next 是最后一个节点。答案说您可以将中间节点标记为虚拟节点。
我不熟悉“虚拟”的想法。如何将节点标记为虚拟节点以及在其他情况下如何使用虚拟节点?
一般的虚拟数据呢?
这个问题没有一般的答案。链表的实现必须已经定义了虚拟节点的概念并一致地使用它。实现此目的的典型方法是声明一个特殊的虚拟实例:
public class Node {
public static final Object DUMMY = new Object();
...
并分配middle.element = DUMMY;
可以想象,除非 API 实现的所有其余部分都遵守此约定,否则这将不起作用。
如果您的列表被指定为无法包含null
元素,那么您也可以分配middle.element = null
,但故事的其余部分保持不变。