Редактирование узла в связанном списке Part2 - PullRequest
2 голосов
/ 09 декабря 2010

Относится к моему предыдущему сообщению Редактирование узла в связанном списке .Я выполнил следующие шаги по редактированию узла:

  1. Редактирование данных целевого узла
  2. Удаление целевого узла
  3. Повторная вставка целевого узла

Проблема в том, что я не могу вставить его в верхнюю часть узла следующим образом ...

std1 90 -> std 2 50 -> std3 20 -> NULL

Я отредактировал std3 на 100. Результат будет примерно таким:

   std2 50 -> std3 20 -> NULL

Короче говоря, я не могу вернуть его на верхний узел.Повторная вставка в любое место, кроме верхнего узла, работает нормально.

1 Ответ

1 голос
/ 09 декабря 2010

У вас будет проблема, если головной узел равен 97%, а вы пропустите узел с 97%.Вам нужно сказать

while (curr_std != NULL && to_add->grade <= curr_std->grade){

У вас также будет проблема, если студент, которого вы редактируете, является первым узлом, потому что это:

while((cur != NULL) && (strcmp(cur->name,temp) != 0)){

оценит как истинное

prev = cur;

никогда не вызовут, оставив prev = ноль.Затем, когда вы доберетесь до

prev->next = cur->next;

, у вас будет нулевая ссылка.Вам необходимо явно проверить добавление в головной узел;это его особый случай.

scanf("%d", &(cur->grade));
if (prev == null) {  // you matched the head
    head = cur->next;
}
else {
    prev->next = cur->next;
}

EDIT Когда вы добавляете заголовок в свой код, вы не устанавливаете заголовок так, чтобы он указывал на ваш новый узел.Вы возвращаете старую голову, которая теперь указывает на второй узел в списке.Попробуйте:

while (curr_std != NULL && to_add->grade < curr_std->grade){
    prev_std = curr_std;
    curr_std = curr_std->next;
}

//  if you're adding to the head, you didn't go into the above loop
//  curr_std is still pointing to head in this case
if (curr_std == head) {
    head = to_add
}
else {
    prev_std->next = to_add;
}

to_add->next = curr_std;
return head;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...