Я пытаюсь выяснить алгоритм удаления из середины связанного списка ..
Моя идея состоит в том, чтобы просмотреть список, найти узел непосредственно перед тем узлом, который я хочу удалить, вызвать егоNprev и установите Nprev в Nnext, где Nnext - после узла, чтобы удалить Ndelete.
Итак Nprev -> Ndelte -> Nnext
.
Моя проблема в том, что я не могу понять, как пройти этот список, чтобы найтиузел перед тем, который я хочу.
Я делал это с ошибками сегмента, потому что я назначаю указатели вне диапазона, который я предполагаю.Это очень грязный алгоритм, который у меня есть, со многими операторами if else.
Есть ли более простой способ сделать это?
В основном мне нужно пройти по списку, применить функцию ккаждый узел для проверки, если это правда или ложь.Если false, я удаляю узел.Удаление первого и последнего не так сложно, но среднее затруднило меня.
Пожалуйста, дайте мне знать, если есть какие-то общие способы решения этой проблемы.Я искал в интернете и не нашел ничего, что мне нужно.
Я использовал это: http://www.cs.bu.edu/teaching/c/linked-list/delete/
, но алгоритм перед шагом 4 удаляет только первый узел в моем списке и не делаетделай большеКак я могу изменить это?
Они также приводят рекурсивный пример, но я этого не понимаю и пугаюсь.