Как создать функцию для изменения значения последнего узла на 1000? - PullRequest
0 голосов
/ 25 апреля 2020

enter image description here

Я пытался создать код для него. Однако это не сработало. Вот мой предыдущий код:

void modifyLastNode(node*) {
  curr = head;
  while (Curr != NULL && curr->data != 99) {
    temp = new node;
    temp->data = 1000;
    temp->next = curr;
  }
}

1 Ответ

1 голос
/ 25 апреля 2020

Помимо синтаксиса , из-за которого ваш код не компилируется должным образом (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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...