Вам нужно два уровня косвенности, чтобы сделать это так, как предлагает Линус, но вы можете сделать это на Python, возможно, имея ссылку на объект, который хранит ссылку на объект или что-то в этом роде (индекс индекс?). Тем не менее, я не думаю, что он так элегантно или эффективно отображает Python, и, вероятно, было бы довольно расточительно использовать объект, чтобы представлять только одну ссылку в связанной структуре.
В случае с Python я просто делал дополнительное ветвление, чтобы проверить случаи, когда вы удаляетесь из головы, если нет какой-то трюки, которой я не хватает.
Что касается реализации связанных списков самостоятельно, я на самом деле нахожу множество случаев использования, когда стандартных библиотек не хватает. Вот один пример:

... где сетка может иметь 10000 клеток. Большинство связанных списков, предоставляемых стандартными библиотеками, не оптимизированы для хранения 10 000 + связанных списков в размере 32-разрядного индекса для каждого списка, поскольку они пытаются предоставить интерфейсы, которые позволяют связанный список использоваться изолированно (не используя отдельная структура данных резервного копирования для хранения, такая как массив). Обычно наиболее эффективное использование связанного списка - это тот, который не владеет памятью или не управляет никакими ресурсами. Это просто связывание данных вспомогательным образом, уже выделенным и управляемым в другой структуре данных, как это для 128-битного (16-байтового) узла дерева в n-арном дереве, где элементы могут быть сохранены на любом уровне иерархии:
struct TreeNode
{
int32 parent; // parent index or -1 for no parent
int32 first_child; // first child of this node or -1
int32 next_sibling; // next child for the parent node or -1
int32 element; // element data stored in this node or -1
// if no data is associated
};
Таким образом, есть много случаев использования для реализации собственных связанных списков и других связанных структур, которые значительно более эффективны для более узко применимого случая использования (структур данных сетки, octrees четырехъядерных деревьев, графиков и т.д.), но опять же, я не думаю, что вы можете использовать этот трюк на языках, которые не позволяют вам использовать два или более уровней указателя. Python по своей сути имеет только один объект для объектов - тот же, что и для Java и C#. Вам понадобится что-то вроде ссылки «ссылка на объект» или индекс «индекс к объекту» или «индекс ссылки объекта на объект».
Также связанные списки не так полезны на языках, которые не позволяют вам управлять тем, где все хранится в памяти, так как вы можете получить кеш-пропуски в изоляторах через связанные списки, иначе если каждый узел списка фрагментирован в как часто бывает после цикла GC, например Для того, чтобы связанные списки были действительно эффективными, как в случае с ядром Linux, вы должны иметь возможность реально контролировать то, где каждый узел находится в памяти, так что обход списка фактически в основном, если не полностью, просто повторяется через непрерывные фрагменты Память. В противном случае вы обычно лучше используете небольшие массивы, даже если это подразумевает удаление и вставки линейного времени в/из середины.
Связанный случай, который Linus пытается усилить, перемещает указатель на указатель через список, обращаясь не только к предыдущему узлу, а скорее указателю, указывающему на узел перспективы.Вместо «head» внешний указатель к узлу не используется, вместо этого используется указатель на указатель. И fwiw, отправленные образцы будут «утечка» удаленного узла, если в этом примере ничего не указывает на него. Они будут недоступны после того, как ссылка будет разорвана. – WhozCraig