我通过指向列表的第一个节点的指针来学习链表。该指针将是列表的头部。我假设如果我想要一个预告片指针,那么我可以对列表中的最后一个节点做同样的事情。
现在我已经看到了链接列表的另一个实现,其中列表前面有一个虚节点,列表末尾有一个虚节点。我不明白为什么我们需要这些虚拟节点。
编辑:添加示例以澄清问题。
如果我想要添加到列表的前面,我将不必执行此操作下面的实现吗?
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: ["testNode"] ...
现在将第一个节点标记为头节点
Node temp = A->next;
A->next = new Node();
A->next->next = temp;
上述方法如何更简化?
答案 0 :(得分:0)
虚拟节点可以在第一个数据记录之前添加,也可以在最后一个之后添加,以简化和加速一些列表处理算法,确保所有链接都可以安全地解除引用,并确保每个列表(甚至包含不包含数据元素的列表)总是有一个"第一个"和"最后"节点。这是一种用于避免边缘情况的黑客攻击。
For Example
- 在循环双向链表的插入函数中。你可以创建一个有益的虚拟节点,可以消除列表为空的特殊情况。
了解更多信息。 Refer