Сохранить двух указатель (curr, prev) изначально оба будут указывать на заголовок списка.
выполняйте цикл в списке, пока не достигнете конца списка или нужного узла.
для каждой итерации перемещайте узел curr к следующему, но перед переходом к следующему сохраните его указатель в указателе prev.
prev = curr; // first store current node in prev
curr = curr->next // move current to next
в конце цикла prev узел будет содержать предыдущий узел.
getPrev(head, key) {
Node* curr = head;
Node* prev = head;
while(curr !=null && curr->data==key){
prev = curr;
curr = curr->next
}
return prev
}
Пример:
список = 1-> 5-> 10-> 4-> 3
Мы хотим, чтобы предыдущий узел равнялся 4. Итак, ключ = 4 и начальная точка на 1
первоначально:
- температура будет указывать на 1
- prev будет указывать на 1
итерация 1:
- Сначала присвойте prev = temp (предыдущая точка 1)
- темп перемещения; temp-> next (временная точка до 5)
итерация 2:
- Сначала присвойте prev = temp (предыдущая точка 5)
- темп перемещения; temp-> next (временная точка до 10)
итерация 3:
- Сначала присвойте prev = temp (предыдущая точка 10)
- темп перемещения; temp-> next (временная точка до 4)
итерация 4:
- temp-> data == ключ, поэтому он вернется из цикла.
- вернуть предыдущий узел