Нет, вы не обновляете все адресов, а только соседние.Посмотрите на список примеров;давайте расширим его еще на два узла:
z A B C D E F
<–> z⊕B <–> A⊕C <-> B⊕D <-> C⊕E <-> D⊕F <->
Значения only , использующие адрес C
, соответствуют значениям B
и D
.Если мы удалим C
, нам нужно будет только изменить эти значения следующими движущимися:
B.link = B.link ⊕ C ⊕ D
D.link = D.link ⊕ C ⊕ B
Это дает нам
z A B D E F
<–> z⊕B <–> A⊕D <-> B⊕E <-> D⊕F <->
Вы видите, как это работает?Требуется совсем немного дополнительной работы: мы уже просмотрели список до C
, чтобы найти элемент для удаления;все, что нам нужно сделать, это сохранить обратный указатель, пока мы движемся вперед (для работы с B
), а затем сделать еще один шаг для доступа к D
.