Недавно я увидел это:
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;
};
list.h
в Linux) — нет особых случаев для вставки/удаления, потому что ни один из указателей узлов никогда не равен NULL. - person Michael Burr   schedule 15.08.2012