2013-08-17 2 views
1

Итак, я написал программу для вставки, удаления и отображения отсортированного связанного списка. Все работает плавно, но когда я ввожу неверное число (не в отсортированном связанном списке) для удаления, моя программа вылетает из строя. Вот моя функция удаления: -Удаление узла в отсортированном связанном списке в C

struct node* remove(struct node* head_ptr, int target) 
{ 
    struct node* help_ptr, *node2del; 
    help_ptr = head_ptr; 
    if(help_ptr != NULL) 
    { 
     if(help_ptr -> data == target) 
     { 
      head_ptr = help_ptr -> next; 
      free(help_ptr); 
      return head_ptr; 
     } 
     while (help_ptr -> next != NULL) 
     { 
      if(help_ptr -> next -> data == target) 
      { 
       node2del = help_ptr -> next; 
       help_ptr -> next = help_ptr -> next -> next; 
       free(node2del); 
       return head_ptr; 
      } 
      help_ptr = help_ptr -> next; 
     } 
     if(help_ptr->next->data != target) 
      printf("\n%d is not in the list.",target); 
    } 
    return head_ptr; 
} 

Click here по полной программе. Заранее спасибо!

ответ

3

Ваш цикл while выполняется до help_ptr->next - NULL. Сразу после цикла вы сравниваете help_ptr->next->data - но как help_ptr->next - NULL, он падает.

Последний if по существу не нужен. Если элемент не найден во время цикла while, элемент отсутствует в списке.

+0

Спасибо за быстрый ответ! – Shail

0

После прохождения всего списка (как вы делаете с циклом while) вы снова проверяете следующий элемент в «условии», который обязательно вызовет ошибку сегментации. После выхода из цикла while, если элемент вы ищете не найден, вы можете сказать «элемент не найден».

Смежные вопросы