最近,我看到了这个:

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 Doubly Linked List

关于c++ - 包含双指针的单链表的正确名称是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11805261/

10-10 14:30