笔记:
双向链表:
每一个元素都保存前驱和后继,
第一个保存的前驱为空, 最后一个后继为空;
头节点:
没什么用,但是在工程实践中发现,如果在写链表的时候增加一个辅助的头节点,
那么就可以简化代码的编写,代码简单了,维护性就变好了;
尾节点:
所包含的地址信息,直接决定了链表的性质;
链表:
删除:
先链接,再删除;
关于节点插入和删除的理解
节点1:
数据+地址(指的是下一个地址)
节点2:
(是节点1所指向的地址)数据+地址
所以: 节点1的指针指向地址 和 节点2的数据所在位置是一样的,就不难理解以下代码了;
数据插入:
node->value = e;
node->next = current->next;
current->next = node;
删除同理;;;;;;;;;;;;;;;;
struct Node : public Object
{
T value; // 泛指 表明可以保存各种类型的数据元素
Node* next; // 指针保存一个地址,这个地址是当前节点的直接后继节点的地址(保存的是下一个节点的地址)
}