包含双指针的单链表的正确名称是什么
What is the proper name of a singly linked list containing a double pointer?
最近,我看到了这个:
struct node {
node* pNext;
node** pPrevNext;
};
void insert_before(node** pNext, node* toInsert) {
toInsert->pNext = *pNext;
toInsert->pPrevNext = pNext;
if (*pNext) (*pNext)->pPrevNext = &toInsert->pNext;
*pNext = toInsert;
};
// node *a, *b;
// insert_before(a->pPrevNext, b);
它看起来像一个单独链接的列表,但包含一个指向上一个节点的下一个指针的指针。我的问题很简单:这个叫什么?如果没有它的"真名",在StackOverflow和整个互联网上搜索有关该数据结构的信息就会变成空的。
请注意,它不是一个双链接列表,看起来像这样:
struct node {
node* pNext;
node* pPrev;
};
它被称为双链表,因为它有两个指针。您可以从类似container_of(*node.pPrevNext, node, pNext)
的宏中获取上一个节点,因此它在逻辑上也等效于标准的双链表。
注意:有趣的问题是XOR列表是单链接的还是双链接的?请参阅XOR双链表
我不认为有任何标准名称;它是双链接列表的一种受限版本,因为您可以在完整的双链接列表中遍历指针,以获取此处可用的所有信息。
它是一个单链列表,允许在O(1)时间内删除节点或在其前面插入节点。它没有名字,因为没有理由使用它。。。双重链接列表更好。
这是一个单链接列表,其行为类似于双链接列表。您可以通过删除元素
*pPrevNext=pNext;
唯一使它不成为一个双重链接的列表的是作者对这个概念的理解不足。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表删除功能的单指针 // 是可能的
- 有人可以向我解释这个链表是如何工作的吗?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 在解决链表问题时创建一个额外的节点是一个好习惯吗?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 在 c++ 中,在链表节点上使用括号有什么意义?
- 在析构函数中删除单链表的正确方法是什么?
- 程序的输出不是来的,它是一个链表程序
- 什么是循环双链表?C++
- 有人能解释一下这行代码的作用吗?它是关于链表的
- 在循环双向链表的第一个节点之前/之后插入的算法是什么?
- 在 Mac 上的 Xcode 中使用 C++ 中的堆栈、队列和链表的最简单方法是什么?
- 在链表形成中,在开头添加变量的代码是什么
- 从使用链表实现的队列中弹出最大节点的最有效方法是什么?C++
- 动态数据结构(如链表)的意义是什么?
- 为什么malloc()是基于链表的
- 分段故障(堆芯倾倒)?它是什么,为什么会引起???(c++中的双循环链表程序)
- 这是c++链表的深度复制和正确实现的=操作符吗?