Помимо синтаксиса , из-за которого ваш код не компилируется должным образом (ie, curr
, head
, Curr
и temp
не определены), код также не определен содержит несколько logi c ошибок:
Вы игнорируете входной параметр.
Вы не меняете то, что curr
указывает на цикл во время цикла, так что вы заканчиваете проверкой поля data
одного и того же node
снова и снова, так что вы в конечном итоге получаете l oop.
Вы выделяете (и просачиваете) новый node
на каждую итерацию l oop. Поиск не должен создавать новые node
с вообще.
Проверка поля data
является неправильным способом обнаружения последнего узла в списке. У последнего узла в поле next
установлено значение NULL, это то, что вы должны искать. Представьте, что вы звоните modifyLastNode()
дважды в одном и том же списке. Первый вызов будет искать 99
(который в вашем примере является последним node
в списке, но в производственной системе его может и не быть), изменит его на 1000
, а затем второй вызов не сможет найти 99
больше.
Вместо этого вам нужно нечто большее:
void modifyLastNode(node *head) {
if (head) {
node *curr = head;
while (curr->next != NULL) {
curr = curr->next;
}
curr->data = 1000;
}
}