LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

Компилятор из двойной косвенности всегда (или хотя бы чаще) сгенерирует код хуже, чем для двух указателей туда же?

у вас формальный селектор доступа(curr) к текущему элементу есть адрес поля next предыдущего елемента. тогда чтобы прочитать key текущего элемента надо написать

(*curr)->key ///два чтения памяти

а в каноническом алгоритме «селектор доступа» это просто адрес текущего и то же самое пишется как

curr->key ///одно чтение

но в каноническом алгоритме адрес prev хранится явно, а у вас он сам curr фактически.

итак. ваш curr и есть prev канонического алгоритма, вы просто берете адрес текущего разыменованием curr.

короче это канонический алгоритм, где лишь изменены селекторы доступа к текущему и предыдущему. предыдущий есть по любому, просто он лихо переназван как «текущий», что не является корректным.

Исходная версия alysnix, :

Компилятор из двойной косвенности всегда (или хотя бы чаще) сгенерирует код хуже, чем для двух указателей туда же?

у вас формальный селектор доступа(curr) к текущему элементу есть адрес поля next предыдущего елемента. тогда чтобы прочитать key текущего элемента надо написать

(*curr)->key ///два чтения памяти

а в каноническом алгоритме «селектор доступа» это просто адрес текущего и то же самое пишется как

curr->key ///одно чтение

но в каноническом алгоритме адрес prev хранится явно, а у вас он сам curr фактически.

итак. ваш curr и есть prev канонического алгоритма, вы просто берете адрес текущего разыменованием curr.

короче это канонический алгоритм, где просто изменены селекторы доступа к текущему и предыдущему. предыдущий есть по любому, просто он лихо переназван как «текущий», что не является корректным.