После того, как значение before найдено в списке, новый узел обменивается своим значением со значением узла before.
Тогда этот узел before должен указывать на новый узел и новыйузел должен указывать на узел, на который ранее указывал узел «до».
Таким образом, эти операторы
new_n->next = p->next;
p->next = new_n;
выполняют требуемую задачу, устанавливая элементы данных рядом с узлами.
Первоначально
| before-value| pointer to the next node|
Новый узел
| new-value | nullptr |
Затем значения обмениваются
| new-value| pointer to the next node|
| before-value | nullptr |
И затем после этого утверждения
new_n->next = p->next;
у нас есть
| new-value| pointer to the next node|
| before-value | pointer to the next node |
, а затем после этого утверждения
p->next = new_n;
у нас есть
| new-value| pointer to the new node |
| before-value | pointer to the next node |
Обратите внимание, что функция имеетутечка памяти в случае, когда узел со значением ранее не найден.